乾貨| 關於程式碼對齊的探討

中興開發者社群發表於2018-01-04

點選上方“中興開發者社群”,關注我們

每天讀一篇一線開發者原創好文

640?wx_fmt=png&wxfrom=5&wx_lazy=1

1 為什麼要程式碼對齊?

程式設計師的工作並不是僅僅編寫程式,程式只是實現業務的一種方式而已。但是能夠將實現業務的方式,變得藝術起來,就不是那麼簡單了。什麼叫藝術呢?藝術並不是複雜的,藝術反而是簡單的、清晰的、明瞭的。如同我們看到一幅畫,就能夠感受到美,這就是所謂的藝術最淺層的體現。在程式裡,我認為藝術就是,編寫簡單清晰、明瞭的程式碼。說的再細一點,就是程式碼一定要排列的整齊,像寫文章、設計平面作品一樣。最起碼保持等號的對齊,保持變數命名的規範。如果程式設計水平高一些,可以用一些更為簡便的方法,來更高快速更快捷的實現功能。再其次就是實現一個功能的各個模組之間,要像搭積木一樣,互相獨立,然後能夠保持模組功能重用性。每一塊合規合矩的積木,最後才能搭建出一座美麗的宮殿。

程式碼像文章一樣,總是要維護的。你是否還記得你看別人程式碼時候那種無名的煩躁心情。因為你看到了亂糟糟的程式碼,看到了沒有註釋的程式碼。你認為這一定是一個傻瓜寫的程式碼。可是你自己寫程式碼的時候,卻沉浸在自己實現功能的成就感裡,完全忘記了,多打幾個空格,多摁幾次tab鍵。

當你按幾次空格,為了給程式碼的等號對齊。同事在一旁問你是不是有強迫症,你完全可以說,我有強迫症,並引以為豪。


2 程式碼對齊的方式

是Tab?還是空格? 使用空格又是幾個空格?


2.1 Tab和空格的區別

Tab和空格其實只是兩個不同的符號,但在程式設計對齊中的意義卻大不一樣。一個Tab可以佔空個格的位置,但一個空格就只有一個空格的位置。

在Keil開發環境中可以顯示出Tab和空格符,不妨看一下在Tab和空格交替編輯下,原本使用佔2空格Tab符號,實際在4隔空Tab下看程式碼(和註釋)就凌亂了。

0?wx_fmt=png

離譜的程式碼中就會看見使用佔3個空格的Tab,以上截圖舉例都還好,沒有使用佔用3個空格的Tab。

程式碼前面的對齊都還好處理,很多工具都可以自動排版,像IAR,只要選中需要對齊的程式碼,Ctrl + T就可以了。但程式碼後面的註釋對齊就不是那麼好處理了,如果使用Tab + 空格混合方式,更是容易混亂。


2.2 關於Tab和空格的調查

有人針對 GitHub 上多種語言的熱門專案(star 數量高的),分析了程式碼對齊使用Tab和空格,以及空幾格的使用情況。

0?wx_fmt=png


0?wx_fmt=png

0?wx_fmt=png


0?wx_fmt=png

0?wx_fmt=png

0?wx_fmt=png

關於程式碼對齊,程式碼編輯器既然支援Tab,也支援使用空格,所以個人覺得兩種方式都可以,只看個人習慣使用那一個了。

程式碼對齊其實很好處理,選擇可以自動對齊的工具對齊就OK了,但在程式碼後面的註釋就不是那麼容易對齊了(特別在Tab和空格混用情況下),我個人習慣在程式碼後面把註釋也對齊,所以基本不用Tab符。

個人建議:對齊使用空格符,佔2空格或4空格(常用)。其優勢:1、方便跨平臺使用;2、對齊註釋。


2.3 tab設定

一份工整對齊的程式碼真的很重要!

現狀是:一份程式碼多人維護,多種編輯器的混合使用,使得程式碼觸目驚心,

關鍵原因是tab和空格鍵混合使用,加上各種編譯器對tab的不同顯示!

怎麼解決?當然是取消tab,所有tab用4個空格代替!怎麼操作?

在編碼的時候不用tab鍵,連續敲4個空格,不可能!帶來更差的效率!

統一使用一種編譯器,不可能!

那怎麼辦?

有!就是在你敲一個tab的時候,編譯器自動的用4個空格代替!

所以先把你手頭上所有編譯器的的tab 寬度設定為4,tab自動轉化為空格。

Source Insight

開啟 [Options]->[Documnet Options] 在右下角[Editing Options]->[Tab width]中填4

開啟 [Options]->[Documnet Options] 鉤選右下角[Editing Options]->[Expand tabs]

 

PSPad

開啟 [設定]->[程式設定] 選擇 [編輯設定] 在[製表符寬度]中填4

開啟 [設定]->[程式設定] 選擇 [編輯設定] 不鉤選 [真實製表符]

 

EditPlus

開啟 [Document]->[Tab Indent] 在[Tab]下的編輯框中填4

開啟 [Document]->[Tab Indent] 鉤選[Insert spaces instead of tab]

 

Notepad++

開啟 [設定]->[製表符設定]->[大小] 填4

鉤選 [設定]->[製表符設定]->[用空格替換]

 

UE

開啟 [高階]->[配置]->[編輯] 在[製表符寬度]中填4

開啟 [高階]->[配置]->[編輯] 鉤選[用空格代替製表符]

 

VC

[tools]->[options] -> [tabs]-> [tab size] 填4


[tools]->[options] -> [tabs]-> [indent size] 填4

[tools]->[options] -> [tabs]-> [insert spaces] 選中


3怎麼把程式碼自動排版對齊

看到這裡,你可能已經對程式碼的排版對齊有了深刻的認識,且想把自己的程式碼作一下調整,那麼你是想一行一行的調整麼?當然不用了,下面告訴你很好的方法。


3.1先把程式碼對齊

1)VC方法

假設有test.c

第一步:先用VC開啟檔案,如下圖:

0?wx_fmt=png

第二步:CTRL + A 選中所有的程式碼。

0?wx_fmt=png

第三步:CTRL+F8,看到沒有全對齊了。


2)VI方法

如果你沒有裝VC的話,就使用該方法

第一步:開啟test.c檔案,這個有人不會嗎?上網查查吧!

0?wx_fmt=png

第二步:在瀏覽模式下輸入命令“1G=G”

注意:G一定得是大寫的,則變為:

0?wx_fmt=png

第三步:最後記住儲存該檔案

輸入“:wq ”命令即可。

 

3)驗證是否tab鍵

 當你把程式碼對齊之後不要竊喜,因為以上兩種方法對齊的時候都是用了tab鍵。

用UE開啟該檔案,

選中[檢視]->[顯示製表符和空格],將看到如下請情況:

“>”表示tab ,“–”表示空格。

0?wx_fmt=png

可以看出在自動對齊的時候產生了很多tab。

 

3)一次性將tab轉換為空格

目前我只發現UE具有該功能。

選中[格式]->[全部製表符轉為空格]

0?wx_fmt=png

5)手工調整

完成以上處理之後,還需要把程式碼整個看看,有些地方可能處理有問題,主要是以下幾個地方:

l 對開原始碼中的部分風格會對齊得不是很理想。

l 一行程式碼太長的情況,需要手工換行。

 

比如以下程式碼,開原始碼中最喜歡這麼搞了。

0?wx_fmt=png

用VC和VI自動對齊後都會出現以下的情況:

0?wx_fmt=png

可能你希望的是這樣的吧,怎麼辦呢?手工調吧!不知道有沒有更好的工具一步到位。

0?wx_fmt=png

3.2 Merge設定

現在大功告成了,記住這個時候,立馬作個簡單驗證後提單入庫,保證下次從最新版本中得到的是對齊的程式碼了。

但是入庫的時候要千萬注意了,必須把空格作為差異入庫,否則你辛苦排版好的程式碼,下次從庫裡看還是不對齊的。

 

選上 [檢視]->[選項]紅色圈圈的部分。

0?wx_fmt=png

看看沒有選中的情況,這樣你去入庫,merge認為你什麼都沒有改哦。

0?wx_fmt=png

選中的情況是這樣的,沒錯,就是調整了幾個空格而已,把這幾個空格入庫吧!還猶豫什麼呢?

0?wx_fmt=png

3.3 Source Insight高階設定

1Draft View選中

選中[View] ->[Draft View]

沒有選中的情況,本來很對齊的程式碼,沒有tab鍵,看起來是以下的樣子,以為程式碼本身不對齊。

0?wx_fmt=png

選中的情況,一下子就全對齊了。

0?wx_fmt=png

2)怎樣讓{}和if對齊

 寫程式碼經常這樣 

你需要手動把 { } 向左移動四個空格,真鬱悶。

在[Options ]->[Documents Options] ,點選 Auto Indent。請選擇左邊的Smart,並且把右邊的兩個勾都去掉。即可!

0?wx_fmt=png

640?wx_fmt=jpeg

相關文章