良好的代码风格养成记

举报
崔庆才丨静觅 发表于 2021/05/22 00:19:55 2021/05/22
【摘要】 综述 优秀的代码风格如同一身得体的打扮,能够给人以良好的印象。初学程序设计,首先必须建立良好的编程习惯,这其中就包括代码风格。本文就代码风格中的几个重点问题进行了讨论,并在文后给出了一份优秀的代码作为风格模板。代码风格不必花费太多专门的时间研究,在使用中不断模仿模板代码,轻轻松松就能写出 “专业的代码”。 80 字符,代码行极限 无论时空怎么转变,世界怎样改变,一行 80 ...

综述

优秀的代码风格如同一身得体的打扮,能够给人以良好的印象。初学程序设计,首先必须建立良好的编程习惯,这其中就包括代码风格。本文就代码风格中的几个重点问题进行了讨论,并在文后给出了一份优秀的代码作为风格模板。代码风格不必花费太多专门的时间研究,在使用中不断模仿模板代码,轻轻松松就能写出 “专业的代码”。

80 字符,代码行极限

无论时空怎么转变,世界怎样改变,一行 80 字符应始终铭记心间。古老的 Unix 终端以 80 列的格式显示文本,为了让源代码与手册具有最佳的可读性, Unix 系统始终坚持着 80 列的传统。80 列不多不少,足够写出一行有意义的代码,同时也足够显示在终端屏幕,足够打印在 A4 纸上。虽然时至今日,我们的屏幕分辨率早已足够高,一行能够显示的内容远超超过 80 字符,但我们的优秀传统已经形成──几乎所有的 Unix/Linux 内核源代码以及联机用户手册都严格地遵守着 80 列极限。如果你正好在使用 Windows 平台下的 Dev C++,你是否有注意到代码编辑框里那条细细的灰色竖线?不错,那正是代码行极限。除了 HTML、XML 等冗长繁复的标记式语言,几乎所有的语言都需要严格遵守代码行极限,这包括 C、C++、Java、C#、Python、PHP 等等。不过有时,比如当 PHP 跟 HTML 打交道的时候,这个限制是可以暂时放松的。过长的代码行总是不好的,好的代码要始终保持苗条的身材。

Tab 还是 Space,众说纷纭的缩进方式

代码离不开缩进,关于缩进主要有两个争论,一个是该用空格(Space)还是用制表符(Tab),另外一个是该用 4 格缩进还是 8 格缩进甚至都不是。 先来谈谈 Space 与 Tab 的问题。坚持用 Space 的程序员会告诉你,如果你从来都不用 Tab,那么你的代码放到所有的地方看都是一样的。没错,这是用 Space 缩进的优点,可惜的是,这是它唯一的优点。代码层次越多,内层代码最前面的缩进便越多,这意味着你需要敲很多很多次空格。即使你能忍受不厌其烦地按空格键直到它坏掉,你也一定会被 IDE 总是自作聪明地插入一些 Tab 字符的行为烦恼不已。建议总是使用 Tab 缩进,因为几乎所有的代码(不仅仅是 C 代码)都在使用 Tab 缩进。 Tab 到底是 4 格还是 8 格?这是 Tab 缩进会被某些人诟病的根源。当你写程序时使用的 Tab 大小与别人读程序时使用的 Tab 大小不同时,再漂亮的排版也会变得杂乱无章。标准的 Tab 是 8 格的,而不幸的是,几乎所有的 Windows 平台下的 IDE,包括 Visual Studio、Dev C++,甚至跨平台的 Eclipse 等,都默认使用 4 格 Tab。我使用的 FreeBSD 系统的所有的内核源代码都采用 8 格缩进,所以我一直坚持使用 8 格缩进。也许你不习惯太大的间距,如果不是在 Unix 平台下,或者不是 C 语言,那就采用 4 格 Tab 吧。如果你在 Unix 下编写 C 代码,使用 8 格的标准 Tab 是更好的习惯。

折行原则,容易被忽略的角落

既然有代码行极限,很多情况下我们不得不断开一个完整的代码行,这就带来了一个问题:折行后应该如何缩进?好的做法是,第一次折行后,在原来缩进的基础上增加 1/2 的 Tab 大小的空格,之后的折行全部对齐第二行。可能这样的文字描述过于晦涩了,还是举个例子罢(以 8 格缩进为例):

1
2
3
4
5
6
7
if (value > a && value > b && value > c && value < d && value < e && value < f
value < h && value < h) { /* 注意折行后的缩进 */
value = value + 1;
value = value * value * value * value * value * value * value * value
* value * value + value * value * value * value * value * value
* value * value; /* 注意再次折行后的缩进 */
}

显然这个段代码没有任何实际用处,只是为了说明折行缩进而编造的。

无处不在的空格,无处不在的空行

需要空格的位置有:

  • if、while、switch 等关键字与之后的左括号 (之间。
  • 左花括号 {之前。
  • 双目运算符两侧,例如 p == NULL。
  • 逗号,与分号;之后,例如 for (i = 0; i < 10; i++)。

不要空格的位置有:

  • 函数名与之后的左括号 (,包括带参数的宏与之后的左括号 (,例如 max (a, b)。
  • 分号;与冒号:之前。
  • 左括号 (右边,右括号) 左边,例如 if (p == NULL)。

需要空行的位置有:

  • 函数的定义之前、函数的定义之后
  • 一组联系紧密的代码段之前和之后

这些规则并不完全,当你碰到上面没有列举出来的情况时,请参考本文提供的模板代码。

左花括号的争议──换行乎?不换乎?

这又是一个仁者见仁智者见智的问题了。从使代码更清晰的角度看,作为代码段开头标识的左花括号 {应该另起一行:

1
2
3
4
5
if (p == NULL)
{
printf("error!\n");
exit(0);
}

可是,这看起来实在不够紧凑,所以大部分的 C 代码(至少 Unix 上如此)都采用了这样的方式:

1
2
3
4
if (p == NULL) {
printf("error!\n");
exit(0);
}

我的建议是采用后者,这会使你的代码显得更加紧凑,也更加专业。需要说明一个特例,在定义函数时,我们总是要给左花括号 { 换行:

1
2
3
4
static int maxint(int a, int b)
{
return a > b ? a : b;
}

额,不过我还是不太习惯额

总结

本文介绍了编程的代码风格,希望对大家有帮助 本文内容为转载,原文出处

文章来源: cuiqingcai.com,作者:崔庆才,版权归原作者所有,如需转载,请联系作者。

原文链接:cuiqingcai.com/1711.html

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。