WebKit 编码风格指南

缩进

  1. 使用空格进行缩进。代码文件中不应出现制表符(需要它们的除外,例如 Makefiles)。
  2. 缩进大小为4个空格。
  3. 代码编辑器应配置为将您键入的制表符展开为4个空格。

大括号

  1. 函数定义 – 开大括号和闭大括号应单独占一行。不要将开大括号放在函数签名同一行。例如

    正确

    void foo()
    {
        // do stuff
    }
    

    错误

    void foo() {
        // do stuff
    }
    
  2. 循环控制结构,包括 for、while 和 do 语句 – 开大括号应与控制结构在同一行。

    正确

    for (int i = 0; i < 10; i++) {
        // do stuff
    }
    

    错误

    for (int i = 0; i < 10; i++) 
    {
        // do stuff
    }
    
    
  3. If/else 语句 - 如上所述,但如果存在 else 子句,闭大括号应与 else 在同一行。此外,单行 if 或 else 子句不应使用大括号。

    正确

    if (timeToGetCoffee) {
        buyCoffee(&coffee);
        chugIt(coffee);
    } else if (timeToGoHome)
        // comment on else case
        outtaHere = true;
    

    错误

    if (timeToGetCoffee)
    {
        buyCoffee(&coffee);
        chugIt(coffee);
    // comment on else case
    } else if (timeToGoHome) 
    {
        outtaHere = true;
    }
            
    if (timeToGetCoffee) {
    } 
    else
    
    // comment on else case
    
    if (timeToGoHome) 
        outtaHere = true;
    
    

括号

  1. 函数声明和调用 – 名称与开括号之间、括号内部以及分隔参数的逗号之前不要使用任何空格。在分隔参数的逗号之后使用一个空格。

    正确

    int myFunction(int arg1, float arg2);
    
    void noArgFunction(); // for C++ or Objective-C++
    
    void noArgFunction(void); // for C or Objective-C
    

    错误

    int myFunction (int arg1, float arg2);
    
    int myFunction( int arg1 , float arg2 );
    
    void noArgFunction ();
    
  2. 控制结构,例如 if、while、do 和 switch – 在开括号之前使用一个空格,但括号内部不使用空格。

空、假和0

  1. 在 C++ 中,空指针值应写为 0。在 C 中应写为 NULL。在 Objective-C 中,如果用作 id 类型或其他 ObjC 对象类型的空指针,应写为 nil,否则为 NULL
  2. 类型为 bool 的真假值(在 C 和 C++ 中常见),或泛指的真假值,应写为 truefalse。Objective-C BOOL 类型的值应写为 YESNO
  3. 对空指针、假值和0值的测试都应直接进行,而不是通过不相等或相等比较。

    正确

    // test for true
    if (foo->isSomething()) {
        // code
    }
    
    // test for false
    if (!foo->isSomething()) {
        // code
    }
    
    // test for non-null
    if (ptr) {
       // code
    }
    
    // test for null
    if (!ptr) {
       // code
    }
    
    // test for nonzero
    if (count) {
        // code
    }
    
    // test for zero
    if (!count) {
        // code
    }
    

    错误

    if (foo->isSomething() == true) {
        // code
    }
    
    if (foo->isSomething() != false) {
        // code
    }
    
    if (p == NULL) {
        // code
    }
    
    if (nil != p) {
        // code
    }
    
    if (count == 0) {
        // code
    }
    

命名

  1. 通用规则:除了极少数例外,类、函数和变量名应优先使用驼峰式大小写(InterCaps)而不是下划线。
  2. C++ 和 Objective-C 类、接口和协议,以及其他类型名称 – 这些名称应以大写字母开头并使用驼峰式大小写。

    正确

    class MyImportantClass;
    

    错误

    class My_important_class;
    
    class myImportantClass;
    
  3. 局部变量应使用小驼峰式大小写(interCaps),但第一个单词应以小写字母开头,例如

    正确

    int myInt;
    

    错误

    int MyInt;
    
    int my_int;
    
  4. C++ 中的自由函数名应遵循与局部变量相同的命名约定。大多数函数名听起来应像动词短语,例如“openDoor”或“walkAroundTheBlock”。(getter、setter、predicate?)
  5. C++ 数据成员应像局部变量一样命名,但带有前缀 m_。
  6. C++ 成员函数应遵循与自由函数相同的命名约定。
  7. Objective-C 方法应遵循常见的 Cocoa 命名风格 – 它们应读起来像一个短语或句子,并且选择器的每个部分都应以小写字母开头并使用小驼峰式大小写。
  8. Objective-C 实例变量应像局部变量一样命名,但以一个下划线开头。
  9. 指针和引用类型 – 指针类型应在类型名称和 * 之间留一个空格(因此 * 如果有的话应紧邻后面的标识符)。对于引用类型,& 应紧邻类型名称。
  10. 枚举成员应使用首字母大写的驼峰式大小写。
  11. #defined 常量应使用全大写名称,单词之间用下划线分隔。
  12. 展开为函数调用或其他非常量计算的宏:这些宏应像函数一样命名,并且末尾应带有括号,即使它们不接受任何参数(某些特殊宏如 ASSERT 除外)。请注意,在这种情况下通常更倾向于使用内联函数而不是宏。

    正确

    #define WBStopButtonTitle()  NSLocalizedString(@"Stop", @"Go/Stop button title")
    

    错误

    #define WB_STOP_BUTTON_TITLE  NSLocalizedString(@"Stop", @"Go/Stop button")
    
    #define WBStopButtontitle  NSLocalizedString(@"Stop", @"Go/Stop button")
    
  13. 名称中的首字母缩略词:如果标识符包含首字母缩略词,则根据该位置的单词是否应大写,将首字母缩略词全部大写或全部小写。

    正确

    urlVariable
    myURLAccessor:
    

    错误

    uRLVariable
    myUrlAccessor: