代码整洁之道札记:格式

前言:东汉大臣陈蕃有一则这样的故事,“一屋不扫何以扫天下”,寓意来表明一个大丈夫,如果连自己的居室都不能打扫干净,怎么胸怀天下。《代码整洁之道》就是来劝诫我们程序员写出更优秀的代码,而“格式”一章也恰巧给我们举出了很多原则,以供我们写出更加规整的代码。

格式的目的

好的代码格式,让人赏心悦目,并且随着版本的更迭,让你能够随心所欲的进行变更,而不是每次都痛苦不堪。

垂直格式

类文件的行不应该成千上万行,应尽量保持短小,当然这点很难做到,我们习惯于在一个类中完成多种多样的功能,以至于我们很难将类进行模块化。

使用空行进行分割

人的眼睛对段落有着很强烈的直观意识,如果一篇文章从上倒下一直没有分割,那你就会立刻离开。

public static BaseBiz getBaseBizBeansByName(String bizName) {
  return factory.getBean(bizName, BaseBiz.class);
 }

 /**
 * @Description: 根据银行类型获取对应的预签约业务类
 */
 public static BasePerSign getBasePerSignByName(String bankType) {
  return factory.getBean(bankType + "PerSign", BasePerSign.class);
 }

 /**
 * @Description: 根据银行类型获取对应的出金业务类
 */
 public static BaseBiz getMoneyOutByBeanName(String bankType) {
  return factory.getBean(bankType + "MoneyOut", BaseBiz.class);
 }

保持好方法之间的空白行会让代码整体看起来很舒服,空白行帮我们识别出来不同的概念。

垂直方向上的靠近

private static Map<String, String> configs = new HashMap<String, String>();
 private static final String CONFIG_FILE = "conf/hxbconfig.properties";
 private static String path = HXBConfig.class.getClass().getResource("/").getPath() + CONFIG_FILE;
 private static Properties prop = new Properties();

以上是一串相关的代码,彼此之间紧密相连,如果你把这四行代码放置在不同的位置,那就非常糟糕了。

垂直距离

在读一个类文件时,往往需要上下跳动,那么这个时候,如果本来紧密相连的内容跳跃的幅度特别大,此时就容易让人觉得沮丧,因为你要不停的浪费记忆来保持对这些跳转有所意识。

变量声明要尽量出现在其使用的地方,本地变量应该在函数的顶部出现。

for (int i = 0; i < bankDailyPreSettlements.size(); i++) {
public static Message startPerSignBiz(Message msg) throws IOException {

  StringBuilder msgs = new StringBuilder();

  // 对银行进行归类
  for (String bank : getList()) {

   if (bankmemList.size() > 0) {
    BasePerSign biz = SpringUtils.getBasePerSignByName(bank);
    logger.info(biz + "开始启动");

    // 进行数据操作
    msgs.append(biz.dealMembers(bankmemList));
   }
  }

实体变量应在类的顶部声明,因为在设计非常好的类中,实体变量会被很多方法共用。

下面是来自百度的一段解释:

实例(体)变量是和类变量相对应的

类变量也叫静态变量,也就是在变量前加了static 的变量;

实例(体)变量也叫对象变量,即没加static 的变量;

那么他们的区别究竟是什么呢?

类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象

public class HXBMoneyIn extends BaseBiz {
 private static Logger logger = Logger.getLogger(HXBMoneyIn.class);
 @Autowired
 private MoneyTransferService moneyTransferService;
 @Override
 public Message dealMsg(Message msgParam) {
  logger.info("华夏银行接收到入金请求...");

moneyTransferService其实就是一个实体变量,所以放在类的顶部。当然对于logger这种静态变量,也是要放在类顶部。

相关函数

若某个函数调用了另外一个函数,则两者应该放在一起,另外调用函数应该放在被调用函数的上方。

public void callAuctionMatch() {
  excuteAuctionMatch();
 }
 private void excuteAuctionMatch() {
  logger.info("启动白盘商品撮合...");
 }

概念相关的代码应该在一起。

public static BaseBiz getMoneyOutByBeanName(String bankType) {
  return factory.getBean(bankType + "MoneyOut", BaseBiz.class);
 }
public static BaseBiz getMoneyInByBeanName(String bankType) {
  return factory.getBean(bankType + "MoneyIn", BaseBiz.class);
 }

横向格式

反正Robert的观点和我刚好吻合,因为现如今显示屏已经变宽,所以行宽保持在120个字符最佳。

水平方向上的格式,我现在基本上使用eclipse的默认格式。

对于水平方向上的区隔与靠近、水平对齐、缩进、空范围,我觉得eclipse做的还不错,我只改进了两点:

1. 120个字符

2. switch格式

团队规则

这一点非常重要,我要求我的团队成员遵守我的编码格式,这样两人的代码在SVN库中就不会发生格式的冲突。

我也来提供一小段我自己的代码格式,我认为还不错

public class StartFrontprocessorServer {
 private static Logger logger = Logger.getLogger(StartFrontprocessorServer.class);

 public static void main(String[] args) {
  Constants.init();

  if (ExcheUtil.canRunForExchange(ExchangeUtil.PRIVILEGE_RESULT_TYPE)) {
   Spriils.getSpringContext();

   logger.info("前置机监听交易端请求业务服务器开始启动");
   Frontener listener = new FrontToBHListener(new CloseHandler() {
    @Override
    public void Close() {
    }
   });
   listener.start();

   // 根据当前交易所配置的银行结算类型进行监听器加载
   SettleBanager.startThread("Listener");

   logger.info("前置机V1.0.0.1.20140521");
  } else {
   logger.info("系统已经被禁用,无法使用!");
  }
 }
}
时间: 2024-11-09 11:08:01

代码整洁之道札记:格式的相关文章

代码整洁之道札记之整洁代码

前言:一直以来,我都非常喜欢整洁规则的代码,我痛恶那些杂乱不堪的代码,然而<代码整洁之道>将要告诉我的远不止这些,那么,我希望将自己欣赏的.能够给我帮助的.指引我前进的方案记录下来,以用来我日后翻看. 要有代码 将需求明确到机器可以执行的细节程度,是编程要做的事.一个好的产品,显然其最精髓的不应该是外观,而是诸如Java编译后的class文件. 糟糕的代码 看到"糟糕"这个词就觉得可怕,我之前接手的一个web项目,最初打包完成后,足足有48M,里面充斥着大量的垃圾代码,糟糕

代码整洁之道札记:有意义的命名

前言:英语虽然才3级,奈何却阻止不了我征服英语的勇气,哈哈,有意义的命名,那必须要倾尽我的所有英语才华,去实现代码的整洁啊. 名副其实 这个说起来容易,做起来难,我们的母语是汉语,最熟悉的是汉语拼音,所以我们在新建一个类名.方法.变量时,第一刻的印象是由拼音组成的:另外由于项目参与者的英语水平又参差不齐,又会产生混乱. public class Time { private long time1; private long time2; private long time3; private l

代码整洁之道札记:函数

前言:随着对<clean code>的不断深入研读,我越发对自己以前编写的代码感到厌烦,我开始着手去做一些改变,让我不再是一个傻瓜,我想让别人去读懂我的代码,因为我记得这样一句话:"任何傻瓜都能编写计算机看懂的代码,而好的程序员能够编写人看懂的代码". 短小 前两天,在百度首页上看到这样一张照片,手枪还没有巴掌大,我觉得非常适合Robert的这个主题. 函数是要足够的短小精致.那么具体应该短小到什么程度呢? 函数20行封顶最佳. 每个函数都依序把你带到下一个函数. 函数的缩

代码整洁之道札记:注释

前言:曾经我对"一份好的代码里注释至少要占到一半的份量"这样话深信不疑,我也不厌其烦的给每一个函数都加上javadoc,对此,我深感自豪:而对于别人写代码不加注释的"坏习惯",我深表遗憾.然而当我读完Robert的"注释"一节,我已经懊恼不已,并且我已经开始对我的代码进行审核,再次优化.我已经开始遵守"别给糟糕的代码加注释–重新写吧"这条准则. 也许你是一个好人,会对代码进行不断的优化改进,然而你经常会把注释忽略掉,就如同下面

《代码整洁之道》精读与演绎】之四 优秀代码的格式准则

本系列文章由@浅墨_毛星云 出品,转载请注明出处.  文章链接:http://blog.csdn.net/poem_qianmo/article/details/52268975 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 这篇文章将与大家一起聊一聊,书写代码过程中一些良好的格式规范. 一.引言 以下引言的内容,有必要伴随这个系列的每一次更新,这次也不例外. <代码整洁之道>这本书提出了一个观点:代码质量与其整洁度成正比,干净的代码,既在质量上

【《代码整洁之道》精读与演绎】之四 优秀代码的书写格式准则

本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/52268975 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 这篇文章将与大家一起聊一聊,书写代码过程中一些良好的格式规范. 一.引言 以下引言的内容,有必要伴随这个系列的每一次更新,这次也不例外. <代码整洁之道>这本书提出了一个观点:代码质量与其整洁度成正比,干净的代码,既在质量

《代码整洁之道》读后感

众所周知,软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关.这一点,无论是敏捷开发派还是传统开发派,都不得不承认.<代码整洁之道>提出一种观念:代码质量与其整洁度成正比.干净的代码,既在质量上较为可靠,也为后期维护.升级奠定了良好的基础.作为编程领域的佼佼者,这些实践在<代码整洁之道>中体现为一条条规则(或称“启示”),并辅以来自现实项目的正.反两面的范例.只要遵循这些规则,就能编写出干净的代码,从而有效提升代码质量.以上便是<代码整洁之道>这本书的内容简介,

【读书笔记】--代码整洁之道

“相对于任何宏伟景愿,对细节的关注甚至是更为关键的专业性基础.首先,开发者通过小型实践获得可用于大型实践的技能和信用度.其次,宏伟建筑中最细小的部分,比如关不紧的门,有点儿没有铺平的地板,甚至是凌乱的桌面,都会将整个大局的魅力毁灭殆尽.这就是整洁代码之所系”----没有比书中的这段话更能说明这本书的意义了. <代码整洁之道>是第1期书山有路活动选出的读本.相对于记住那些如何写出整洁代码的那些法则,养成保持代码整洁.提高代码质量的习惯和思维更为重要.全书大致分为三个部分,第一部分1-10章都是介

代码整洁之道

命名,多花些时间推敲命名, 有意义的命名非常重要. 接口的命名,不使用"I"开头比较简洁,加上I以后是比较规范,但是比较繁琐以及废话.如果想区别接口和实现,不如在实现类中进行编码,比如添加后缀"Imp",android以及jdk中的大多数接口都没有使用I. 取名字带有简写要慎重, 比如"人事系统"的类, 前面都是"RSXT..",除了让快捷按钮找不到类以外,没有啥意义了,用包吧. 函数,函数要短小,要职责明确,最好功能单一,参