4 - 缩进

4 个空格常被作为缩进排版的一个单位。本文档并没有规定缩进的实现方式 (可以使用空格或者Tab建)。如果使用Tab,则Tab设置为 8 个空格 (而非 4 个)。

译者注:不同的IED或者文本编辑器中,Tab的空格数是不同的,常见的有4格或者8格。所以,这个文档中,如果强调了使用 Tab 键来缩进,意味着空了8格。否则,直接说明空了几个格,不然,会产生歧义。至于为什么是8格,我个人理解,这个规范应该是参考 C 语言规范而来。一般不建议用Tab键来代替空格,除非整个团队都有一致的开发工具或者编码格式文件。

4.1 行长度

尽量避免一行的长度超过 80 个字符,因为很多终端和工具不能很好处理。

注意: 用于文档中的例子应该使用更短的行长,长度一般不超过 70 个字符。

4.2 换行

当一个表达式无法容纳在一行内时,可以依据如下一般规则断开:

  • 在一个逗号后面断开
  • 在一个操作符前面断开
  • 宁可选择较高级别 (higher-level) 的断开,而非较低级别 (lower-level) 的断开
  • 新的一行应该与上一行同一级别表达式的开头处对齐
  • 如果以上规则导致你的代码混乱或者使你的代码都堆挤在右边,那就代之以缩进8个空格。

以下是断开方法调用的一些例子:

  1. someMethod(longExpression1, longExpression2, longExpression3,
  2. longExpression4, longExpression5);
  3. var = someMethod1(longExpression1,
  4. someMethod2(longExpression2,
  5. longExpression3));

以下是两个断开算术表达式的例子。前者更好,因为断开处位于括号表达式的外边,这是个较高级别的断开。

  1. longName1 = longName2 * (longName3 + longName4 - longName5)
  2. + 4 * longname6; // 推荐
  3. longName1 = longName2 * (longName3 + longName4
  4. - longName5) + 4 * longname6; // 避免

以下是两个缩进方法声明的例子。前者是常规情形。后者如果按照常规的缩进方法就会使得第二行和第三行太靠右边,所以只缩进8个字符。

  1. //常规缩进
  2. someMethod(int anArg, Object anotherArg, String yetAnotherArg,
  3. Object andStillAnother) {
  4. ...
  5. }
  6. //缩进8个空格来避免缩进的太深
  7. private static synchronized horkingLongMethodName(int anArg,
  8. Object anotherArg, String yetAnotherArg,
  9. Object andStillAnother) {
  10. ...
  11. }

if 语句的换行通常使用 8 个空格的规则,因为常规缩进(4个空格)会使语句体看起来比较费劲。比如:

  1. //不要使用这种
  2. if ((condition1 && condition2)
  3. || (condition3 && condition4)
  4. ||!(condition5 && condition6)) { //BAD WRAPS
  5. doSomethingAboutIt(); //MAKE THIS LINE EASY TO MISS
  6. }
  7. //用这个来代替
  8. if ((condition1 && condition2)
  9. || (condition3 && condition4)
  10. ||!(condition5 && condition6)) {
  11. doSomethingAboutIt();
  12. }
  13. //或用这种
  14. if ((condition1 && condition2) || (condition3 && condition4)
  15. ||!(condition5 && condition6)) {
  16. doSomethingAboutIt();
  17. }

这里有三种可行的方法用于处理三元运算表达式:

  1. alpha = (aLongBooleanExpression) ? beta : gamma;
  2. alpha = (aLongBooleanExpression) ? beta
  3. : gamma;
  4. alpha = (aLongBooleanExpression)
  5. ? beta
  6. : gamma;

PREVIOUS | CONTENTS | NEXT