為什麼我要豎向對齊程式程式碼
最近在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提供的一個技巧——如何自動對齊程式碼塊:
正確的工具能輕鬆的完成這樣的任務。計算機就是用來為我們幹這些枯燥、重複的事情的-CPU的工作很廉價,我們可以“浪費”CPU的工作來讓我們的程式碼更清晰可讀。
在Linux 核心程式碼中還有大量的例子能說明豎向對齊程式碼能讓程式碼更適合人類閱讀。
豎向對齊程式碼並不是在所有情況下都適用——但對於大多數情況,它的好處是大大的。
程式碼是我們表達我們的思想的媒介。如果你的工具使得理解這些思想更困難,那說明工具需要改變,而不是我們。
英文原文:Why I vertically align my code (and you should too!)。翻譯:techug
相關文章
- 為什麼我要豎向對齊程式程式碼(你也應該這樣做)
- 為什麼我要垂直對齊程式碼
- 為什麼他需要豎向對齊程式碼,而你不需要
- 為什麼我要垂直對齊程式碼(你也要如此!)
- 我們為什麼要從 HTTPRunner 轉向 MeterSphereHTTP
- 程式碼之間為什麼要加空格?
- 我們程式設計師為什麼要關注 JavaScript ?程式設計師JavaScript
- 為什麼我要公開程式碼和想法
- 為什麼程式設計師要儘量少寫程式碼程式設計師
- 作為程式設計師為什麼要閱讀原始碼程式設計師原始碼
- Reviewbot 開源 | 為什麼我們要打造自己的程式碼審查服務?View
- 為什麼我看不懂你的程式碼
- 為什麼我們程式設計師寫不出好程式碼?程式設計師
- 我們為什麼要閱讀webpack原始碼Web原始碼
- 為什麼要成為「無敵」程式設計師?程式設計師
- 設計師為什麼要學程式設計,開發者為什麼要學設計?程式設計
- 什麼是物件,為什麼要物件導向,怎麼才能物件導向?物件
- 為什麼我要學習“機器學習”?機器學習
- 我為什麼要學技術
- 中國程式設計師為什麼要跳槽?程式設計師
- 為什麼要給應用程式簽名?
- 我為什麼是程式設計師?程式設計師
- 我為什麼痴迷於程式設計?程式設計
- 為什麼我還在程式設計程式設計
- 我為什麼喜歡程式設計程式設計
- Java程式設計——重構-你為什麼要對引數賦值?Java程式設計賦值
- 為什麼我要寫自己的框架?框架
- 為什麼要虛擬化,為什麼要容器,為什麼要Docker,為什麼要K8S?DockerK8S
- 為什麼我從 Angular 轉向 ReactAngularReact
- 為什麼 Python 程式碼要寫得美觀而明確Python
- 為什麼企業要選擇低程式碼開發平臺?
- 老生常談!程式設計師為什麼要閱讀原始碼?程式設計師原始碼
- 要麼程式設計要麼成為一段程式程式設計
- 為什麼程式要從0開始計數
- 程式設計師:你為什麼要離職?程式設計師
- 為什麼要投資程式設計師的幸福?程式設計師
- 何為程式語言?為什麼要學C語言?C語言
- 為什麼我喜歡 Lisp 程式語言Lisp