為什麼我要豎向對齊程式程式碼

techug發表於2014-12-18

  最近在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!)。翻譯:techug

相關文章