為什么我要垂直對齊代碼(你也要如此!)

jopen 9年前發布 | 4K 次閱讀 代碼


英文原文:Why I vertically align my code (and you should too!)

上周在 HackerNews,關于 Linux Kernel 代碼風格展開了有趣的討論

在討論中,我就應不應該垂直對齊代碼發起了一場小小的圣戰。我完全支持!讓我細說端詳。

什么是垂直對齊?

舉個小例子:

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% 的編程工作是為了解決問題,剩下的 10% 的工作需要再用 90% 的時間用來理解問題是怎樣被解決的。https://zh.wikipedia.org/wiki/90-90%E6%B3%95%E5%88%99 '" data-ke-src="http://www.labazhou.net/2015/11/why-i-vertically-align-my-code-and-you-should-too/#easy-footnote-bottom-1">注1

閱讀代碼和閱讀散文,有著極大的不同。我們期望作者能夠清晰地解釋他們的語句,而不是用他們選中的語言過于冗長地說些不相干的東東,我們都期待普通的語法風格。

的確,Kernel 代碼風格著重強調了這一點。你選擇變量命名的方式,和代碼的用途一樣重要。

考慮下面的代碼:

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

即便你對代碼庫有深入理解,它也不是特別易讀的代碼行。

var totalBill = apply_tax (initialBill, taxRate);

對于清晰的應用程序,要借助命名習慣、間隔和大寫,從而讓代碼更易于閱讀。這意味著,接手我們代碼的可憐家伙,將用更少的時間來解密代碼,把更多時間放在理解上面。

為什么使用等寬字體?

在所有著名的、老生常談的舌戰中,有兩個實力基本相當的陣營,即等寬字體 https://zh.wikipedia.org/wiki/%E7%AD%89%E5%AE%BD%E5%AD%97%E4%BD%93 '" data-ke-src="http://www.labazhou.net/2015/11/why-i-vertically-align-my-code-and-you-should-too/#easy-footnote-bottom-2">注2VS 比例字體https://zh.wikipedia.org/wiki/%E6%AF%94%E4%BE%8B%E5%AD%97%E4%BD%93'" data-ke-src="http://www.labazhou.net/2015/11/why-i-vertically-align-my-code-and-you-should-too/#easy-footnote-bottom-3">注3 的爭論。

某些異教徒會對你說,比例字體最棒的——無視這些異教徒吧。另一些異教徒則在他們爭論比例字體所具有的上等純潔度時,給你的心靈留下了不和諧——這些可憐的、受譴責的靈魂呀。

最終,還要歸結到可讀性。你覺得,什么東西能夠最容易地幫助你理解代碼?為什么 IDE 有著色方案——因此你能一眼看出“foo”是函數、常量、變量還是注釋。只要能讓你更快地理解這段代碼的用途,它就是好的東西

這也是電子表格如此受歡迎的原因之一。列提高了可讀性。你可以快速地順著一列掃視,并能注意到某行和其它行是否存在明顯不同。

我們沒有工具

有趣的是,在 HackerNews 上的討論中,我面臨的最大批評與垂直對齊是否有用無關,而是我們的工具有多么糟糕。

「這破壞了 diff 的可讀性和可用性。比如你修改了某個常量,需要快速追蹤因此引起的嚴重 bug。對于水平排列的代碼,diff 或許包含了所有修改過的行,從而掩蓋了關鍵修改。有一些忽視空格的變通方案,以及基于單詞的 diff,不過依本人愚見,不值得這么麻煩。

——Andreas van Cranenburgh

……還有……

假如你有 50 行賦值語句,你把所有值都和最大的那個對齊了,那么增加一個賦值語句,將迫使你更新 50 行代碼。我已經遇到過這些情形了,每當那時候,我就明白了,不要那樣對齊值是多么地重要。

——scrollaway

這些論點在某些語境中是合理的,但是說明了需要更好的工具。

我想起了 Elastic Tabstops ——自動排列代碼塊的方法。

By Nick Gravgaard

工具能夠輕松容納這種工作方式。計算機就是為我們做單調、重復工作的,CPU 周期「浪費」在讓代碼更可讀方面的代價,已經足夠便宜了。

在 Linux Kernel 中,還有大量例子,垂直排列讓代碼更便于人類分析。

垂直排列不適用于每個場景,但是對于快速評估代碼,其可讀性是無與倫比的。

代碼是具有創造性的平臺,我們通過這個平臺來表達想法。如果工具增加了理解這些想法的難度,那么,需要改變的就是工具、而非我們。


譯文: 《為什么我要垂直對齊代碼(你也要如此!) 》 臘八粥

注釋

  1. 90-90 法則(ninety-ninety rule,九九定律,99 定律)是計算機編程和軟件工程領域的一個有名的法則,出自于一句幽默的格言:(開發軟件時)前 90% 的代碼要花費 90% 的開發時間,剩余的 10% 的代碼要再花費 90% 的開發時間。https://zh.wikipedia.org/wiki/90-90%E6%B3%95%E5%88%99 
  2. 等寬字體(Monospaced Font)是指字符寬度相同的電腦字體。與此相對,字符寬度不盡相同的電腦字體稱為比例字體。在等寬字體中,字母i,j顯得兩側余白較多,而字母w,m等 的筆畫顯得相當擁擠。但是隨著圖形用戶界面主流的更新和電腦技術的提高,處理比例字體的局限性得到了突破,因此現在排版上顯得比較自然的比例字體的使用已 經相當普及。另外,代碼也經常使用等寬字體。https://zh.wikipedia.org/wiki/%E7%AD%89%E5%AE%BD%E5%AD%97%E4%BD%93 
  3. 比例字體(Proportional Font)是指字符寬度不盡相同的電腦字體。與此相對,字符寬度相同的電腦字體稱為等寬字體。https://zh.wikipedia.org/wiki/%E6%AF%94%E4%BE%8B%E5%AD%97%E4%BD%93
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!