Qt代码风格 [翻译]

缩进

  • 使用4个空格进行缩进
  • 使用空格,不要使用Tab来缩进

变量声明

  • 每个变量声明使用单独一行
  • 避免使用过于简化或没有意义的名称(如,"a", "rbarr", "nughdeget")
  • 单字符的变量名仅仅在含义非常明显的场景可以使用,如计数或临时字符
 // 错误
 int a, b;
 char *c, *d;

 // 正确
 int height;
 int width;
 char *nameOfThis;
 char *nameOfThat;
  • 只要在需要时才声明变量
  • 变量名和方法明使用小写字母开头,后面连续的单词首字母大写。
  • 不要使用缩略
 // 错误
 short Cntr;
 char ITEM_DELIM = ' ';

 // 正确
 short counter;
 char itemDelimiter = ' ';
  • 类名称永远使用大写字母开头。公开类以'Q'开头,后接大写字母(QRgb)。公共方法通常以'q'开头(qRgb)。
  • 缩略词在开头的也是用驼峰样式(如,QXmlStreamReader, 而不是 QXMLStreamReader)。

空格

  • 使用空行将语句组合在适合的地方
  • 始终只使用一个空白行
  • 始终在关键字之后和大括号之前添加一个空格:
 // 错误
 if(foo){
 }

 // 正确
 if (foo) {
 }
  • 对于指针或引用,始终在类型和“”或“&”之间使用单个空格,但在“”或“&”与变量名称之间不要有空格。
 char *x;
 const QString &myString;
 const char * const y = "hello";
  • 在二元运算符前后添加空格
  • 在类型转换关键词后不要添加空格
  • 尽量避免使用C风格的类型转换
 // 错误
 char* blockOfMemory = (char* ) malloc(data.size());

 // 正确
 char *blockOfMemory = reinterpret_cast(malloc(data.size()));
  • 不要把多个语句放在一行上
  • 通过扩展,对控制流程语句的主体使用一个新行:(原句:By extension, use a new line for the body of a control flow statement:)
 // 错误
 if (foo) bar();

 // 正确
 if (foo)
     bar();

大括号

  • 使用紧连的大括号:大括号与声明的开头位于同一行。 如果右大括号后跟另一个关键字,也要放在一行中:
 // 错误
 if (codec)
 {
 }
 else
 {
 }

 // 正确
 if (codec) {
 } else {
 }
  • 例外:函数实现(但不是lambda表达式)和类声明始终在新行行首添加左括号:
 static void foo(int g)
 {
     qDebug("foo: %i", g);
 }

 class Moo
 {
 };
  • 仅当条件语句的主体包含多行时才使用花括号:
 // 错误
 if (address.isEmpty()) {
     return false;
 }

 for (int i = 0; i < 10; ++i) {
     qDebug("%i", i);
 }

 // 正确
 if (address.isEmpty())
     return false;

 for (int i = 0; i < 10; ++i)
     qDebug("%i", i);
  • 例外1:如果父语句包含多行/换行符,也使用大括号:
 // 正确
 if (address.isEmpty() || !isValid()
     || !codec) {
     return false;
 }
  • 例外2:括号对称性:在if-then-else块中使用大括号,不管if的主体或else的主体有几行:
 // 错误
 if (address.isEmpty())
     qDebug("empty!");
 else {
     qDebug("%s", qPrintable(address));
     it;
 }

 // 正确
 if (address.isEmpty()) {
     qDebug("empty!");
 } else {
     qDebug("%s", qPrintable(address));
     it;
 }

 // 错误
 if (a)
     …
 else
     if (b)
         …

 // 正确
 if (a) {
     …
 } else {
     if (b)
         …
 }
  • 当条件语句的主体为空时,使用花括号
 // 错误
 while (a);

 // 正确
 while (a) {}

小括号

  • 使用小括号将表达式分组:
 // 错误
 if (a && b || c)

 // 正确
 if ((a && b) || c)

 // 错误
 a + b & c

 // 正确
 (a + b) & c

switch语句

  • case关键词与switch位于同一列
  • 每个case最后都必须有一个break(或return)语句,或者使用Q_FALLTHROUGH()来表示有意不中断,除非要后面紧接另一个case的内容。
 switch (myEnum) {
 case Value1:
   doSomething();
   break;
 case Value2:
 case Value3:
   doSomethingElse();
   Q_FALLTHROUGH();
 default:
   defaultHandling();
   break;
 }

跳转语句 (break, continue, return, and goto)

  • 不要将else放在在跳转语句的后面:
 // 错误
 if (thisOrThat)
     return;
 else
     somethingElse();

 // 正确
 if (thisOrThat)
     return;
 somethingElse();
  • 例外:如果代码本身是对称的,则允许使用else来显示对称性

换行

  • 保持一行少于100个字符; 如有必要则折行
    • 注释/ apidoc行应保持在实际文本的80列以下。 根据周围内容进行调整,避免“锯齿”段落的方式(原文:Comment/apidoc lines should be kept below 80 columns of actual text. Adjust to the surroundings, and try to flow the text in a way that avoids "jagged" paragraphs.)
  • 逗号在被折断行的行尾,操作符在新行的行首。操作符在行尾很容易被隐藏起来,如果编辑器比较窄的话。
 // 错误
 if (longExpression +
     otherLongExpression +
     otherOtherLongExpression) {
 }

 // 正确
 if (longExpression
     + otherLongExpression
     + otherOtherLongExpression) {
 }

一般例外

  • 当严格遵守规则使你的代码看起来很糟糕的时候,不要遵守

风格艺术

可以使用下面的代码风格使得你的代码更有艺术性

--style=kr 
--indent=spaces=4 
--align-pointer=name 
--align-reference=name 
--convert-tabs 
--attach-namespaces
--max-code-length=100 
--max-instatement-indent=120 
--pad-header
--pad-oper

请注意,“无限制”--max-instatement-indent仅用于astyle,因为如果后续行需要缩进限制,astyle不够智能以包装第一个参数。 鼓励您手动限制在语句缩进大约50个列:(原文:Note that "unlimited" --max-instatement-indent is used only because astyle is not smart enough to wrap the first argument if subsequent lines would need indentation limitation. You are encouraged to manually limit in-statement-indent to roughly 50 colums:)

    int foo = some_really_long_function_name(and_another_one_to_drive_the_point_home(
            first_argument, second_argument, third_arugment));

官方原文链接

你可能感兴趣的:(Qt代码风格 [翻译])