9.8. 条件语句

总述

倾向于不在圆括号内使用空格. 关键字 ifelse 另起一行.

说明

对基本条件语句有两种可以接受的格式. 一种在圆括号和条件之间有空格, 另一种没有.

最常见的是没有空格的格式. 哪一种都可以, 最重要的是 保持一致. 如果你是在修改一个文件, 参考当前已有格式. 如果是写新的代码, 参考目录下或项目中其它文件. 还在犹豫的话, 就不要加空格了.

  1. if (condition) { // 圆括号里没有空格.
  2. ... // 2 空格缩进.
  3. } else if (...) { // else 与 if 的右括号同一行.
  4. ...
  5. } else {
  6. ...
  7. }

如果你更喜欢在圆括号内部加空格:

  1. if ( condition ) { // 圆括号与空格紧邻 - 不常见
  2. ... // 2 空格缩进.
  3. } else { // else 与 if 的右括号同一行.
  4. ...
  5. }

注意所有情况下 if 和左圆括号间都有个空格. 右圆括号和左大括号之间也要有个空格:

  1. if(condition) // 差 - IF 后面没空格.
  2. if (condition){ // 差 - { 前面没空格.
  3. if(condition){ // 变本加厉地差.
  1. if (condition) { // 好 - IF 和 { 都与空格紧邻.

如果能增强可读性, 简短的条件语句允许写在同一行. 只有当语句简单并且没有使用 else 子句时使用:

  1. if (x == kFoo) return new Foo();
  2. if (x == kBar) return new Bar();

如果语句有 else 分支则不允许:

  1. // 不允许 - 当有 ELSE 分支时 IF 块却写在同一行
  2. if (x) DoThis();
  3. else DoThat();

通常, 单行语句不需要使用大括号, 如果你喜欢用也没问题; 复杂的条件或循环语句用大括号可读性会更好. 也有一些项目要求 if 必须总是使用大括号:

  1. if (condition)
  2. DoSomething(); // 2 空格缩进.
  3.  
  4. if (condition) {
  5. DoSomething(); // 2 空格缩进.
  6. }

但如果语句中某个 if-else 分支使用了大括号的话, 其它分支也必须使用:

  1. // 不可以这样子 - IF 有大括号 ELSE 却没有.
  2. if (condition) {
  3. foo;
  4. } else
  5. bar;
  6.  
  7. // 不可以这样子 - ELSE 有大括号 IF 却没有.
  8. if (condition)
  9. foo;
  10. else {
  11. bar;
  12. }
  1. // 只要其中一个分支用了大括号, 两个分支都要用上大括号.
  2. if (condition) {
  3. foo;
  4. } else {
  5. bar;
  6. }