乾貨| 關於程式碼對齊的探討
點選上方“中興開發者社群”,關注我們
每天讀一篇一線開發者原創好文
1 為什麼要程式碼對齊?
程式設計師的工作並不是僅僅編寫程式,程式只是實現業務的一種方式而已。但是能夠將實現業務的方式,變得藝術起來,就不是那麼簡單了。什麼叫藝術呢?藝術並不是複雜的,藝術反而是簡單的、清晰的、明瞭的。如同我們看到一幅畫,就能夠感受到美,這就是所謂的藝術最淺層的體現。在程式裡,我認為藝術就是,編寫簡單清晰、明瞭的程式碼。說的再細一點,就是程式碼一定要排列的整齊,像寫文章、設計平面作品一樣。最起碼保持等號的對齊,保持變數命名的規範。如果程式設計水平高一些,可以用一些更為簡便的方法,來更高快速更快捷的實現功能。再其次就是實現一個功能的各個模組之間,要像搭積木一樣,互相獨立,然後能夠保持模組功能重用性。每一塊合規合矩的積木,最後才能搭建出一座美麗的宮殿。
程式碼像文章一樣,總是要維護的。你是否還記得你看別人程式碼時候那種無名的煩躁心情。因為你看到了亂糟糟的程式碼,看到了沒有註釋的程式碼。你認為這一定是一個傻瓜寫的程式碼。可是你自己寫程式碼的時候,卻沉浸在自己實現功能的成就感裡,完全忘記了,多打幾個空格,多摁幾次tab鍵。
當你按幾次空格,為了給程式碼的等號對齊。同事在一旁問你是不是有強迫症,你完全可以說,我有強迫症,並引以為豪。
2 程式碼對齊的方式
是Tab?還是空格? 使用空格又是幾個空格?
2.1 Tab和空格的區別
Tab和空格其實只是兩個不同的符號,但在程式設計對齊中的意義卻大不一樣。一個Tab可以佔空個格的位置,但一個空格就只有一個空格的位置。
在Keil開發環境中可以顯示出Tab和空格符,不妨看一下在Tab和空格交替編輯下,原本使用佔2空格Tab符號,實際在4隔空Tab下看程式碼(和註釋)就凌亂了。
離譜的程式碼中就會看見使用佔3個空格的Tab,以上截圖舉例都還好,沒有使用佔用3個空格的Tab。
程式碼前面的對齊都還好處理,很多工具都可以自動排版,像IAR,只要選中需要對齊的程式碼,Ctrl + T就可以了。但程式碼後面的註釋對齊就不是那麼好處理了,如果使用Tab + 空格混合方式,更是容易混亂。
2.2 關於Tab和空格的調查
有人針對 GitHub 上多種語言的熱門專案(star 數量高的),分析了程式碼對齊使用Tab和空格,以及空幾格的使用情況。
關於程式碼對齊,程式碼編輯器既然支援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開啟檔案,如下圖:
第二步:CTRL + A 選中所有的程式碼。
第三步:CTRL+F8,看到沒有全對齊了。
2)VI方法
如果你沒有裝VC的話,就使用該方法
第一步:開啟test.c檔案,這個有人不會嗎?上網查查吧!
第二步:在瀏覽模式下輸入命令“1G=G”
注意:G一定得是大寫的,則變為:
第三步:最後記住儲存該檔案
輸入“:wq ”命令即可。
3)驗證是否tab鍵
當你把程式碼對齊之後不要竊喜,因為以上兩種方法對齊的時候都是用了tab鍵。
用UE開啟該檔案,
選中[檢視]->[顯示製表符和空格],將看到如下請情況:
“>”表示tab ,“–”表示空格。
可以看出在自動對齊的時候產生了很多tab。
3)一次性將tab轉換為空格
目前我只發現UE具有該功能。
選中[格式]->[全部製表符轉為空格]
5)手工調整
完成以上處理之後,還需要把程式碼整個看看,有些地方可能處理有問題,主要是以下幾個地方:
l 對開原始碼中的部分風格會對齊得不是很理想。
l 一行程式碼太長的情況,需要手工換行。
比如以下程式碼,開原始碼中最喜歡這麼搞了。
用VC和VI自動對齊後都會出現以下的情況:
可能你希望的是這樣的吧,怎麼辦呢?手工調吧!不知道有沒有更好的工具一步到位。
3.2 Merge設定
現在大功告成了,記住這個時候,立馬作個簡單驗證後提單入庫,保證下次從最新版本中得到的是對齊的程式碼了。
但是入庫的時候要千萬注意了,必須把空格作為差異入庫,否則你辛苦排版好的程式碼,下次從庫裡看還是不對齊的。
選上 [檢視]->[選項]紅色圈圈的部分。
看看沒有選中的情況,這樣你去入庫,merge認為你什麼都沒有改哦。
選中的情況是這樣的,沒錯,就是調整了幾個空格而已,把這幾個空格入庫吧!還猶豫什麼呢?
3.3 Source Insight高階設定
1)Draft View選中
選中[View] ->[Draft View]
沒有選中的情況,本來很對齊的程式碼,沒有tab鍵,看起來是以下的樣子,以為程式碼本身不對齊。
選中的情況,一下子就全對齊了。
2)怎樣讓{}和if對齊
寫程式碼經常這樣
你需要手動把 { } 向左移動四個空格,真鬱悶。
在[Options ]->[Documents Options] ,點選 Auto Indent。請選擇左邊的Smart,並且把右邊的兩個勾都去掉。即可!
相關文章
- 關於C語言結構體對齊問題的探討C語言結構體
- 關於程式設計師的工作效率(絕對乾貨!)程式設計師
- 關於mongo原子操作的探討Go
- 關於identity列的探討IDE
- JdonFramework程式碼探討Framework
- SEO關於探討URL的知識!
- 程寅:關於支付流程的探討
- 關於rman中set newname的探討
- 關於 performSelector 的一些小探討performSelector
- 關於python中slicing的探討Python
- 關於 DDoS 攻擊事件的探討(轉)事件
- 關於 Xmind 用例線上管理的探討
- 關於 Roguelike 的探討,及基於 Roguelike 的新框架框架
- 關於 PHP-fpm master 程式和 worker 職責探討PHPAST
- 關於記憶體對齊記憶體
- 關於volatile與指令重排序的探討排序
- 關於PaaS的純乾貨總結
- 如何閱讀《計算機程式設計藝術》TAOCP【關於最乾的乾貨的一些乾貨】計算機程式設計
- 關於不使用firefly補丁對系統進行美化的探討(轉)
- 關於MSSQL中計算列上建索引的探討SQL索引
- 關於apache james郵件伺服器的探討Apache伺服器
- 關於.Net中屬性的使用探討(一) (轉)
- 關於.Net中屬性的使用探討(二) (轉)
- 乾貨丨RPA 關於各種對賬的分享與總結
- 關於拉幕程式的討論和原始碼 (轉)原始碼
- 關於 js 物件 轉 字串 和 深拷貝 的 探討JS物件字串
- 關於如何防止重複簽到的技術探討
- 【轉】關於oracle中Move機制的一點探討Oracle
- 關於多型實現Singleton模式的探討 (轉)多型模式
- 關於 RAC VIP (Oracle10G RAC) 的探討(zt)Oracle
- 用程式碼探討KVC/KVO的實現原理
- 用程式碼探討 KVC/KVO 的實現原理
- 我的理解——關於“ERP過時論”的探討(轉)
- 乾貨技巧|關於Redis的16個使用技巧Redis
- 關於結構體中指標的一些探討結構體指標
- 關於enq: TX - index contention 等待的探討與測試ENQIndex
- 雷軍直播發乾貨:小米無人機/VR齊亮相無人機VR
- 對多執行緒程式,單核cpu與多核cpu如何工作相關的探討執行緒單核