WebKit 编码风格指南
缩进
- 使用空格进行缩进。代码文件中不应出现制表符(需要它们的除外,例如 Makefiles)。
- 缩进大小为4个空格。
- 代码编辑器应配置为将您键入的制表符展开为4个空格。
大括号
- 函数定义 – 开大括号和闭大括号应单独占一行。不要将开大括号放在函数签名同一行。例如
正确
void foo() { // do stuff }
错误
void foo() { // do stuff }
- 循环控制结构,包括 for、while 和 do 语句 – 开大括号应与控制结构在同一行。
正确
for (int i = 0; i < 10; i++) { // do stuff }
错误
for (int i = 0; i < 10; i++) { // do stuff }
- 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;
括号
- 函数声明和调用 – 名称与开括号之间、括号内部以及分隔参数的逗号之前不要使用任何空格。在分隔参数的逗号之后使用一个空格。
正确
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 ();
- 控制结构,例如 if、while、do 和 switch – 在开括号之前使用一个空格,但括号内部不使用空格。
空、假和0
- 在 C++ 中,空指针值应写为
0
。在 C 中应写为NULL
。在 Objective-C 中,如果用作id
类型或其他 ObjC 对象类型的空指针,应写为nil
,否则为NULL
。 - 类型为
bool
的真假值(在 C 和 C++ 中常见),或泛指的真假值,应写为true
和false
。Objective-CBOOL
类型的值应写为YES
和NO
。 - 对空指针、假值和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 }
命名
- 通用规则:除了极少数例外,类、函数和变量名应优先使用驼峰式大小写(InterCaps)而不是下划线。
- C++ 和 Objective-C 类、接口和协议,以及其他类型名称 – 这些名称应以大写字母开头并使用驼峰式大小写。
正确
class MyImportantClass;
错误
class My_important_class; class myImportantClass;
- 局部变量应使用小驼峰式大小写(interCaps),但第一个单词应以小写字母开头,例如
正确
int myInt;
错误
int MyInt; int my_int;
- C++ 中的自由函数名应遵循与局部变量相同的命名约定。大多数函数名听起来应像动词短语,例如“openDoor”或“walkAroundTheBlock”。(getter、setter、predicate?)
- C++ 数据成员应像局部变量一样命名,但带有前缀 m_。
- C++ 成员函数应遵循与自由函数相同的命名约定。
- Objective-C 方法应遵循常见的 Cocoa 命名风格 – 它们应读起来像一个短语或句子,并且选择器的每个部分都应以小写字母开头并使用小驼峰式大小写。
- Objective-C 实例变量应像局部变量一样命名,但以一个下划线开头。
- 指针和引用类型 – 指针类型应在类型名称和 * 之间留一个空格(因此 * 如果有的话应紧邻后面的标识符)。对于引用类型,& 应紧邻类型名称。
- 枚举成员应使用首字母大写的驼峰式大小写。
- #defined 常量应使用全大写名称,单词之间用下划线分隔。
- 展开为函数调用或其他非常量计算的宏:这些宏应像函数一样命名,并且末尾应带有括号,即使它们不接受任何参数(某些特殊宏如 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")
- 名称中的首字母缩略词:如果标识符包含首字母缩略词,则根据该位置的单词是否应大写,将首字母缩略词全部大写或全部小写。
正确
urlVariable myURLAccessor:
错误
uRLVariable myUrlAccessor: