【朱永光】Microsoft Source Analysis for C#的推波助瀾作用
強制編碼風格是一個長期被熱烈爭論的話題。人們不僅為團隊應該遵循何種編碼風格而爭論不休,同時還要爭論究竟是否應該確立一個標準的編碼風格。現在,微軟釋出了StyleCop,這是他們在內部使用的一個編碼風格強制工具,微軟的這一舉措無疑將起到推波助瀾的作用。
StyleCop,也即所謂的微軟C#原始碼分析器(Microsoft Source Analysis for C#),用途和FxCop相似,只不過作用物件是原始碼。此外,它和FxCop一樣是源於微軟的內部工具,在發展到一定程度之後,微軟覺得對其他人也有 用,於是被公開發布。不過,StyleCop的自定義程度不如FxCop那麼高。
StyleCop,也即所謂的微軟C#原始碼分析器(Microsoft Source Analysis for C#),用途和FxCop相似,只不過作用物件是原始碼。此外,它和FxCop一樣是源於微軟的內部工具,在發展到一定程度之後,微軟覺得對其他人也有 用,於是被公開發布。不過,StyleCop的自定義程度不如FxCop那麼高。
Jason Allor聲稱由這個工具所強制要求的大約200條規則與Visual Studio的預設設定是相容的。遺憾的是,他忘記提到Visual Studio具有6個完全不同的預設設定集合,其中多數與這個工具互相矛盾的。
這個工具涉及的方面包括:
- 支援檔案內容
- 除錯文字
- 編排元素頭和檔案頭中的文件格式
- 元素、語句、表示式和查詢子句的佈局
- 行空格
- 元素、欄位和變數的命名
- 大括號、圓括號、方括號等的位置
- 在方法宣告或方法呼叫中方法引數的位置
- 關鍵字和操作符周圍的空格
- 在類中元素的標準順序
- 訪問修飾符的使用
- 內建型別的使用
在空白的控制檯應用程式上執行這些規則,會返回9個錯誤,如果你開啟“Keep Tabs”設定,則會出現16個錯誤。一些規則稍顯笨拙,例如要求“using”指示符必須放在名稱空間內,而不是放在檔案頂部。
已經有人在抱怨這個工具缺乏校正的支援。Dustin Norman寫道:
在將這個工具執行在一個較小的程式集上時,這個工具要我手動修改561個違規錯誤,而它卻不能在不影響程式碼語義的基礎上自動為我修復錯誤——這真的要讓我崩潰了!
古老的tabs vs spaces爭論【譯者注:即程式碼的縮排是用Tabs來實現還是用Spaces來實現】又被提及,而且我們還不能禁用這一規則。Nick Berardi寫道:
真是開玩笑。Tabs居然不被允許。相反,只能使用空格。這個主意糟透了,因為它會破壞語句塊的佈局,例如一個變數使用3個空格,而其他變數則使用了4個。無論如何,應該允許禁用類似tab規則這樣毫無意義的規則。
如 果能夠禁用這些規則,這個工具就更好了。我知道你會說他們已經夠好了。但是我完全不同意使用空格來代替tab。這是毫無邏輯可言的,或許只有在Vi編輯器 第一次出現從而引發了開發人員之間的“聖戰”可堪比擬吧。我喜歡用Tab的方式編寫我的程式碼,但它總是警告我,我的每行程式碼都有tab在其中。
同時,Daniel Stolt也問到了關於VB的情況:為.NET開發人員提供一些額外工具總是受歡迎的——但為什麼只有C#的?程式碼格式的強制規則對於VB開發人員來說也是非常需要的。
顯然,VB程式碼編輯器在對關鍵字和操作符進行縮排和空格的處理中,已經具有自動格式化的一些初步支援,但還不夠接近StyleCop所支援的效果。
順便說來,我完全同意Nick Berardi對於tabs vs spaces的觀點:使用tabs有什麼問題?難道按4-5次方向按鈕比直接指向某個位置更有某種優勢?還是在原始碼檔案中儲存4-5個空白字元存在著某種好處?
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-364684/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 2019年AI開放平臺建設穩步推進 安防推波助瀾AI
- 製造行業想要乘風破浪,怎能少得了企業雲盤推波助瀾行業
- source命令的作用
- Android4 Source Analysis - Root-ExternalAndroid
- 機器學習的前世今生:一段波瀾壯闊的歷史機器學習
- LIRE教程之原始碼分析 | LIRE Tutorial of Analysis of the Source Code原始碼
- 百元級別智慧音響戰爭再起波瀾
- Microsoft 釋出Rotor,一場Shared Source對Open Source的速度比賽 (轉)ROS
- Linux Kernel File IO Syscall Kernel-Source-Code Analysis(undone)Linux
- 彈好工作三步曲,波瀾不驚去創新
- 淘寶圖形搜尋技術發展 流量分配再起波瀾
- Microsoft Analysis Services 2005 不支援可變字元varchar()ROS字元
- 廠商鎖定韌體無線路由器韌體波瀾再起路由器
- C#中#region,#if的作用C#
- TreeView.cs source code in C# .NETViewC#
- 資料庫半年回顧:國外波瀾不驚,國內勢如破竹資料庫
- 李沐、劉群、劉洋、朱靖波、張民:當前機器翻譯的瓶頸
- 網際網路零售新波瀾:RPA在電商行業的應用場景行業
- C#介面作用的深入理解C#
- C# 介面作用的深入理解C#
- C#中SqlParameter的作用與用法C#SQL
- C# HTTP幫助類C#HTTP
- WebEx的朱敏Web
- 斐波那契數列 (C#)C#
- C# 變數作用域C#變數
- windows microsoft之c#語言規範WindowsROSC#
- microsoft/RulesEngine:基於 Json的C#規則引擎ROSJSONC#
- 朱贇的技術管理課-朱贇-極客時間
- 遊戲圈大佬離職這一年:一面波瀾不驚,一面風雲變幻遊戲
- C#中Thread.Sleep()的作用及用法C#thread
- 十個推薦使用的 Laravel 的輔助函式Laravel函式
- microsoft之c# .net framework各版本下載中心ROSC#Framework
- TI 推動駕駛輔助技術創新,推出全新AWR2944車載毫米波雷達感測器
- 推廣瑞波基因XAG需要理解的15個問題
- C# RESTful API 訪問輔助類C#RESTAPI
- Sandcastle入門:建立C#幫助文件ASTC#
- Eric Lippert推薦的C#書單C#
- Flutter Analysis OptionsFlutter