为什么我要垂直对齐代码(你也要如此!)
上周在 HackerNews,关于 Linux Kernel 代码风格展开了有趣的讨论。
在讨论中,我就应不应该垂直对齐代码发起了一场小小的圣战。我完全支持!让我细说端详。
什么是垂直对齐?
举个小例子:
introbert_age = 32; intannalouise_age = 25; intbob_age = 250; intdorothy_age = 56;
下面的代码更易于阅读:
introbert_age = 32; intannalouise_age = 25; intbob_age = 250; intdorothy_age = 56;
我扫一眼就能看到”bob_age”有点儿不正常。我不用多费事,就轻松地看出来它们都是整数。
这条意见还没被广为分享,因此我打算解释一下,为什么很多人认为这是一种有用的风格指南。
理解
90% 的编程工作是为了解决问题,剩下的 10% 的工作需要再用 90% 的时间用来理解问题是怎样被解决的。注1
阅读代码和阅读散文,有着极大的不同。我们期望作者能够清晰地解释他们的语句,而不是用他们选中的语言过于冗长地说些不相干的东东,我们都期待普通的语法风格。
的确,Kernel 代码风格着重强调了这一点。你选择变量命名的方式,和代码的用途一样重要。
考虑下面的代码:
var thinG=doIt(thestuff,MORE_sTuff); /* LOL! */
即便你对代码库有深入理解,它也不是特别易读的代码行。
var totalBill = apply_tax(initialBill, taxRate);
对于清晰的应用程序,要借助命名习惯、间隔和大写,从而让代码更易于阅读。这意味着,接手我们代码的可怜家伙,将用更少的时间来解密代码,把更多时间放在理解上面。
为什么使用等宽字体?
在所有著名的、老生常谈的舌战中,有两个实力基本相当的阵营,即 等宽字体 注2VS 比例字体注3 的争论。
某些异教徒会对你说,比例字体是最棒的——无视这些异教徒吧。另一些异教徒则在他们争论比例字体所具有的上等纯洁度时,给你的心灵留下了不和谐——这些可怜的、受谴责的灵魂呀。
最终,还要归结到可读性。你觉得,什么东西能够最容易地帮助你理解代码?为什么 IDE 有着色方案——因此你能一眼看出“foo”是函数、常量、变量还是注释。只要能让你更快地理解这段代码的用途,它就是好的东西!
这也是电子表格如此受欢迎的原因之一。列提高了可读性。你可以快速地顺着一列扫视,并能注意到某行和其它行是否存在明显不同。
我们没有工具
有趣的是,在 HackerNews 上的讨论中,我面临的最大批评与垂直对齐是否有用无关,而是我们的工具有多么糟糕。
「这破坏了 diff 的可读性和可用性。比如你修改了某个常量,需要快速追踪因此引起的严重 bug。对于水平排列的代码,diff 或许包含了所有修改过的行,从而掩盖了关键修改。有一些忽视空格的变通方案,以及基于单词的 diff,不过依本人愚见,不值得这么麻烦。
——Andreas van Cranenburgh
……还有……
假如你有 50 行赋值语句,你把所有值都和最大的那个对齐了,那么增加一个赋值语句,将迫使你更新 50 行代码。我已经遇到过这些情形了,每当那时候,我就明白了,不要那样对齐值 是多么地重要。
——scrollaway
这些论点在某些语境中是合理的,但是说明了需要更好的工具。
我想起了 Elastic Tabstops ——自动排列代码块的方法。
工具能够轻松容纳这种工作方式。计算机就是为我们做单调、重复工作的,CPU 周期「浪费」在让代码更可读方面的代价,已经足够便宜了。
在 Linux Kernel 中,还有大量的例子,垂直排列让代码更便于人类分析。
垂直排列不适用于每个场景,但是对于快速评估代码,其可读性是无与伦比的。
代码是具有创造性的平台,我们通过这个平台来表达想法。如果工具增加了理解这些想法的难度,那么,需要改变的就是工具、而非我们。
注释
90-90法则(ninety-ninety rule,九九定律,99定律)是计算机编程和软件工程领域的一个有名的法则,出自于一句幽默的格言:(开发软件时)前90%的代码要花费90%的开发时间,剩余的10%的代码要再花费90%的开发时间。 https://zh.wikipedia.org/wiki/90-90%E6%B3%95%E5%88%99
等宽字体(Monospaced Font)是指字符宽度相同的电脑字体。与此相对,字符宽度不尽相同的电脑字体称为比例字体。在等宽字体中,字母i,j显得两侧余白较多,而字母w,m等的笔画显得相当拥挤。但是随着图形用户界面主流的更新和电脑技术的提高,处理比例字体的局限性得到了突破,因此现在排版上显得比较自然的比例字体的使用已经相当普及。另外,代码也经常使用等宽字体。https://zh.wikipedia.org/wiki/%E7%AD%89%E5%AE%BD%E5%AD%97%E4%BD%93
比例字体(Proportional Font)是指字符宽度不尽相同的电脑字体。与此相对,字符宽度相同的电脑字体称为等宽字体。https://zh.wikipedia.org/wiki/%E6%AF%94%E4%BE%8B%E5%AD%97%E4%BD%93
建议继续学习:
- Vim(gvim)编程字体推荐 (阅读:6310)
- 介绍“最好的编程字体”Monaco (阅读:6304)
- 等宽字体:程序员的字体 (阅读:4594)
- CSS设置字体大小 (阅读:3796)
- 小tips: 使用等空格实现最小成本中文对齐 (阅读:3206)
- 用TAB缩进, 用SPACE对齐 (阅读:3073)
- 解决Chrome最小字体限制 (阅读:3031)
- 默认Web字体样式 (阅读:2818)
- 字体文件也属于二进制文件 (阅读:2664)
- Google font api、web font与中文 (阅读:2398)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:viviworld 来源: 腊八粥
- 标签: 字体 对齐
- 发布时间:2016-02-07 14:43:31
- [54] IOS安全–浅谈关于IOS加固的几种方法
- [53] 如何拿下简短的域名
- [53] Oracle MTS模式下 进程地址与会话信
- [53] Go Reflect 性能
- [51] android 开发入门
- [49] 图书馆的世界纪录
- [49] 读书笔记-壹百度:百度十年千倍的29条法则
- [46] 【社会化设计】自我(self)部分――欢迎区
- [38] 程序员技术练级攻略
- [31] 视觉调整-设计师 vs. 逻辑