为什么我要竖向对齐程序代码,你也应该这样做

oschina
 oschina
发布于 2014年12月18日
收藏 114

最近在HackerNews上Linux内核编码风格讨论非常热闹。

讨论的进行中,我的一个回复触发了另外一场关于是否应该竖向对齐代码的口水仗。我坚持我的观点!下面让我来解释一下为什么要竖向对齐。

为什么要竖向对齐代码?

举一个简单的例子:

int robert_age = 32;
int annalouise_age = 25;
int bob_age = 250;
int dorothy_age = 56;

相较而言,下面的写法更易读:

int robert_age     = 32;
int annalouise_age = 25;
int bob_age        = 250;
int dorothy_age    = 56;

只要用眼睛一扫,我们就能发现”bob_age”数字异常。我可以去轻松的识别这些变量都是数字,不需要拿眼睛一个个对比。

这种编码风格并不是被广泛接受。所以,我需要解释一些这种风格的好处。

代码的可读性

90%的编程活动是为了解决问题。另外90%是用来理解代码是如何解决问题的。

阅读代码跟阅读小说没多大区别。我们希望作者能把他的想法写明白,不需要陈词滥调长篇累牍,但同时要遵守所使用的语言的语法。

事实上,Linux内核编码风格里十分强调这一点。你给变量的命名同它的作用同等重要。

看一下下面的这段代码:

var thinG=doIt(thestuff,MORE_sTuff); /* LOL! */

就算你是十分解这段代码,你读起它来也十分费劲。

var totalBill = apply_tax(initialBill, taxRate);

通过给予变量有意义的命名,空格,大小写区分,我们能让这段代码更清晰。这意味着接手我们的代码的下一位程序员能更容易的理解它。

为什么要使用Monospace字体?

关于代码编辑器应该使用monospace字体还是proportional字体的争论,从未停息也不会停息,两派人各有所好。

有些异教徒会告诉你proportional 字体最好的——忽略这些人吧。

最终是为可读性。什么方法能最简单的帮助我们理解代码?所以IDE才会有代码高亮配色,这样你就能轻松的分辨“foo”究竟是一个函数,是一个变量,是一个常量,还是一个注释。只要是能帮助我们理解代码的东西都是好东西!

编辑器的问题

有趣的是,我遇到的很多批评的声音不是说代码竖向对齐的好坏,而是批评我的代码编辑器不行。

你这样做会破坏使用diff对比版本差异时的可读性和有效性。比如,本来只是一行是有一个变量有bug,你能为了对齐变量改动了很多行,影响了查看关键修改处。也有能够忽略空格的diff技术,但至少你这样做得不偿失。
Andreas van Cranenburgh

…还有…

假如说,你有50行代码要竖向对齐,你把所有的值对对齐距离最远的那一行,而增加一个更大距离的行,你需要修改50行。我就遇到过这样的问题,最终发现这样做是错误的。
scrollaway

他们说的是对的——在某些情况下。但关键是他们不会使用更好工具。

我记得Elastic Tabstops提供的一个技巧——如何自动对齐代码块:

columnblocks_coloured

正确的工具能轻松的完成这样的任务。计算机就是用来为我们干这些枯燥、重复的事情的-CPU的工作很廉价,我们可以“浪费”CPU的工作来让我们的代码更清晰可读。

Linux 内核代码中还有大量例子能说明竖向对齐代码能让代码更适合人类阅读。

竖向对齐代码并不是在所有情况下都适用——但对于大多数情况,它的好处是大大的。

代码是我们表达我们的思想的媒介。如果你的工具使得理解这些思想更困难,那说明工具需要改变,而不是我们。

英文原文:Why I vertically align my code (and you should too!)
中文翻译:程序师网

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:为什么我要竖向对齐程序代码,你也应该这样做
加载中

最新评论(83

Jimmy哥
Jimmy哥

引用来自“Twisst”的评论

做得再好,Ctrl+Shift+F 格式化代码就不存在了。

引用来自“一刀”的评论

明明是Ctrl+Alt+L

引用来自“清风-蓝魔泪”的评论

那看来你们是没用过Ctrl+W

引用来自“poseidon0000”的评论

我相信你们都没用过Alt+F4

引用来自“千里山南”的评论

胡说,我的就是Alt+F4
就是就是,我的也是Alt+F4,特方便
GoingHigh
GoingHigh
对齐的工作还是交给IDE比较合理,要不竖向对齐得增加很多工作量
foreach
foreach

引用来自“encro”的评论

估计作者没有看另外一篇文章,方法1的优点:
1,少了很多空格,节省了输入空格和代码对齐的时间;
2,由于变量名字是随时调整的,每次增加变量你可能都要增加其它行的空格;
3,变量名长时离赋值太远,容易错乱,而变量名短又不容易理解;
4,大部分ID都提供了方法1的自动排版功能。

引用来自“0Scn”的评论

表面上你在使用着代表先进的计算机,实际上你的意识形态还停留在原始阶段。对那些标榜着任何情况下都只使用类似notepad工具的牛人,我是诚心为你们烧香的。

引用来自“AbnerChen”的评论

我是vim的虔诚教徒……
那开发效率是不是很慢
AbnerChen
AbnerChen

引用来自“encro”的评论

估计作者没有看另外一篇文章,方法1的优点:
1,少了很多空格,节省了输入空格和代码对齐的时间;
2,由于变量名字是随时调整的,每次增加变量你可能都要增加其它行的空格;
3,变量名长时离赋值太远,容易错乱,而变量名短又不容易理解;
4,大部分ID都提供了方法1的自动排版功能。

引用来自“0Scn”的评论

表面上你在使用着代表先进的计算机,实际上你的意识形态还停留在原始阶段。对那些标榜着任何情况下都只使用类似notepad工具的牛人,我是诚心为你们烧香的。
我是vim的虔诚教徒……
魏曼奇
魏曼奇
Alt+F4是VS的格式化代码。Ctrl+Shift+F、etc。
Sublime_Text安个插件也支持。
糊里糊涂
糊里糊涂

引用来自“小强哥unas”的评论

没注意IDEA支持得怎么样?

引用来自“BuN_Ny”的评论

别的不知道,JS是可以自选是不是要文章说的对齐方式。
IDEA是可选的,可以选择竖向对齐,也可以不用
糊里糊涂
糊里糊涂

引用来自“像小强样活着”的评论

万一中间出现个很长的变量就比较悲剧了。
有过...
对齐之后,值都跑到屏幕外了....
之后我就果断不用竖向对齐了
落舞者
落舞者

引用来自“Twisst”的评论

做得再好,Ctrl+Shift+F 格式化代码就不存在了。

引用来自“一刀”的评论

明明是Ctrl+Alt+L

引用来自“陈阳阳阳”的评论

Ctrl+K+D不服
= 不服
愚_者
愚_者

引用来自“Twisst”的评论

做得再好,Ctrl+Shift+F 格式化代码就不存在了。

引用来自“一刀”的评论

明明是Ctrl+Alt+L

引用来自“愚_者”的评论

IDEA上有办法自定义格式化方式吗?比如修改成楼主这样的竖向对齐

引用来自“千里山南”的评论

IDEA支持等号对齐的,不过我对这种样式不感冒

引用来自“愚_者”的评论

怎么设置的?我设置玩玩看

引用来自“千里山南”的评论

code style->wrapping and braces ->field groups ->align in columns
我这样设了,但是 Ctrl Alt L 没有那样格式化嘛。。不是这个快捷键是吗?
Jack_Zhu
Jack_Zhu

引用来自“Twisst”的评论

做得再好,Ctrl+Shift+F 格式化代码就不存在了。

引用来自“一刀”的评论

明明是Ctrl+Alt+L

引用来自“Jack_Zhu”的评论

好像NB和JB的正好分别是这两个

引用来自“BuN_Ny”的评论

我觉得他俩说的是Eclipse和Idea
Eclipse没怎么用过,我说的是Netbeans和JetBrains, JB系我也没用过Idea -_-#
返回顶部
顶部