哪種編碼風格是你的“菜”

jopen 11年前發布 | 7K 次閱讀 編碼

  英文原文:Reprogramming My Brace Style Mind

  每個程序員都有自己的編碼風格,這基本上都是由他們的喜好決定的,此外,程序員還樂于爭論各種編碼風格的優劣,比如關于 Tab 和空格(見《Tab v.s. 空格:一個永恒的神圣戰爭》、《空格“異教徒”去死》)、80 列規則(見《保衛 80 列規則》),還有大括號的縮進風格等。 

  一致的編碼風格,更便于閱讀。因此程序員都想極力說服別人認同并使用與自己一致的編碼風格。下面來了解一下我的編碼風格變化歷程吧,哪種編碼風格是你的“菜”呢? 

  1980/1990 年代的緊湊風格 

  當我開始編程時,我使用 tab 字符,因為使用它保存的文件更小,還可以將代碼限制到 80 列。我還遵循 Kernighan 和 Ritchie 的《C Programming Language》一書中約定的“大括號放在同一行”規則,代碼看起來是這樣的:

int main (int argc, char *argv[]) {  
       int a = rand () % 100;  
       if (a > 25) {  
               call_a_function ();  
               call_another_function ();  
       } else {  
               call_b_function ();  
       } // end if   } // end main  

  當時 Tab 縮進默認為 8 個字符寬度,這意味著你不能縮進過多,以免打破“80 列”寬度的限制,這也迫使你寫更少、更精簡的函數名或代碼(這是好事)。大括號在同一行上,意味著可以在一頁中顯示更多的代碼。 

  但也有一些不好的事情。我們開始使用更短的變量名,這使代碼更難以閱讀和維護。我們在代碼行之間沒有添加任何空白行,結果很難找到代碼塊開始和結束標記(因此我們必須在代碼塊結束的地方加上注釋)。由于縮進太寬,留給我們的編碼空間就少了。 

  2000 年的寬松風格 

  在 2000 年,我以及周圍的程序員基本上都已經切換到了微軟的C/C#約定上,即使用 4 個空格,而不是 Tab,不限制代碼行的長度,大括號單獨一行。如下:

int main (int argc, char *argv[])  
{  
   int a = rand () % 100;  

   if (a > 25)  
   {  
       call_a_function ();  
       call_another_function ();  
   }  
   else  
   {  
       call_b_function ();  
   }  
}  

  空格縮進意味著我們不必處理不同編輯器中 Tab 大小(Tab 大小可以根據用戶喜好進行設置)。我們使用空行,以使代碼更易于閱讀。單獨一行的大括號使代碼塊更加明顯(可以很快找出開始和結束點)。 

  但是,這也導致了一些問題。由于行長度(大屏幕)無限制,我們不再感覺必須要限制縮進的數量,并開始創建更大更長的代碼。由于當時的編輯器無法很好地格式化代碼,程序員經常會在水平滾動時無法看到左側的代碼。代碼變得難以閱讀,并排比較更困難。 

  因此,在 2000 年初,我選擇使用 4 個空格來縮進,依然遵循 80 列規則,將大括號單獨放在一行中,以改善可讀性。 

  2010 年的典型風格 

  現在,我開始使用 Xcode 4。Xcode 中默認為 4 個空格縮進,保持不變,還可以智能格式化代碼,不會出現滾動到右邊看不到左邊代碼的情況。但是,令我郁悶的是,默認代碼片段中大括號竟然不一致,有時單獨一行,有時和代碼共用一行。 

  看看默認的 initWithNibName 代碼片段: 

- (id) initWithNibName:(NSString *) nibNameOrNil bundle:(NSBundle *) nibBundleOrNil  
{  
   self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  
   if (self) {  
       self.title = NSLocalizedString (@"Detail", @"Detail");  
   }  
   return self;  
}  

  事實證明,蘋果沒有弄錯。它使用了正確的 Kernighan & Ritchie 風格,在早期C語言書籍中是為了節省空間才將所有大括號放在代碼后面的。根據維基百科,K&R風格是: 

當秉承K&R時,每一個函數左括號都應在下一行中,并與開頭行有相同的縮進。括號中的語句應該縮進,右括號應該與函數開頭有相同的縮進,并單獨一行。對于代碼塊內的控制語句,左括號應與控制語句在同一行中,右括號單獨一行(除非有 else 或 while 關鍵字)。

  事實上,這是典型的K&R風格,針對所有的C衍生語言,包括C++、C#和 Objective-C。這是語言本身的設計者所遵循的風格。 

  因此,我也改變了我的括號使用風格,我仍然使用空格縮進,仍然遵循 80 列寬度原則,但現在更多依賴于編輯器來進行代碼格式化。不過,我現在堅持真正的K&R括號風格。 

int main (int argc, char *argv[])  
{  
   int a = rand () % 100;  

   if (a > 25) {  
       call_a_function ();  
       call_another_function ();  
   } else {  
       call_b_function ();  
   }  
}  

  你的編碼風格是什么樣?歡迎評論。

來自: www.iteye.com
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!