Java编码规范,让你的代码赏心悦目--函数

  • 短小
    • 函数越短小越好!
      • if,else,while,它们中的代码最好只有一行!最好是一个函数调用
      • 又因为函数名称具有说明意义,所以它们本质上又是一个不错的说明文档!
  • 只做一件事
    • 函数应该只做一件事情!
      • 如何判断函数是否只做了一件事情:看该函数是否能再拆出一个函数,该函数不仅只是单纯地重新诠释其实现!
  • 每个函数一个抽象层级
    • 自顶向下读代码:向下规则
      • 确保函数做一件事情的关键,就是函数中的语句要在同一抽象层级上。
        • 程序就像是一系列TO开头的段落,每一段都描述当前抽象层级,并引用位于下一个抽象层级的后续TO起头段落。
  • switch语句
    • 如果该语句只出现一次,那么最好是用来创建多态对象(也就是工厂模式),而且要隐藏在某个继承关系中。
    • 当然,要视情况而定,灵活应用;
  • 使用描述性名称
    • 别害怕长名称。长而具有描述性的名称,要比描述性的长注释好很多;
    • 命名方式要一致。使用与模块名一脉相承的短语,名词和动词给函数命名,如:

includeSetupAndTeardownPages

includeSetupPages

includeSuiteSetupPage

  • 函数参数
    • 最理想的参数数量是零,其次是一个,再次是两个,尽量避免使用三个,除非你有特殊的理由;
    • 最好不要向函数传递布尔值;
    • 参数对象
      • 如果函数需要两个,三个甚至更多,那么是时候将它们封装成一个类了;

Circle makeCIrcle(double x,double y,double radius);
Circle makeCircle(Point center,double radius);

  • 可变参数算一个参数;
  • 函数和参数应当形成一种良好的动词/名词对形式

writeField(name),它告诉我们,"name"是一个"field"

  • 尽量避免使用输出参数
  • 分隔指令与询问
    • 函数要么做什么事,要么回答什么事,二者不可兼得。
  • 使用异常替代返回错误码
    • 返回错误码就是要求调用者立刻处理错误

Java编码规范,让你的代码赏心悦目--函数

Java编码规范,让你的代码赏心悦目--函数

  • 如果使用异常代替错误码,错误处理代码就能从主路径代码中分离出来,得到简化:
    • Java编码规范,让你的代码赏心悦目--函数
  • 抽离try/catch代码块
    • 最好把trycatch代码块的主体部分抽离出来,另外形成函数:
      • Java编码规范,让你的代码赏心悦目--函数
  • 错误处理就是一件事
    • 错误处理就是一件事。处理错误的函数不该做其他事。如果关键字try在某个函数中存在,它就该是这个函数的第一个单词,而且在catch/finally代码块后面也不该有其他内容;
  • Error.java依赖磁铁
    • 返回错误码通常按时某处有个类或是枚举,定义了所有错误码
      • Java编码规范,让你的代码赏心悦目--函数
      • 这样的类就是依赖磁铁;其他许多类都要导入和使用它。当它被修改时,所有使用它的类都要重新编译;
        • 使用异常替代错误码,新异常就可以从异常类派生出来,无需重新编译或重新部署;
  • 别重复自己
    • 结构化编程
      • 每个函数,函数中的每个代码块都应该有一个入口,一个出口。这样就意味着每个函数只该有一个return,循环中不能有breakcontinue,永远不要有GOTO语句;
        • 在短小的函数中,这条不太适用。只要保持函数短小,偶尔出现的return,break,continue没有坏处;
    • 如何写出这样的函数?
      • 不可能一蹴而就!
      • 一开始都冗长而复杂;
      • 完成之后,开始打磨,分解函数,修改名称,消除重复,或者拆散类。并保证它们测试通过