對於c++檔案(*.cpp和*.h),我們使用clan格式(版本3.6 +)來確保**樣式。在更改任何cpp或**件之後,在合併之前,必須執行src/native/format-code.sh。此指令碼將確保所有本機**檔案都遵循編碼樣式準則。
對於非**檔案(xml等),我們當前的最佳指導是一致性。編輯檔案時,保持新**和更改與檔案中的樣式一致。對於新檔案,它應該符合該元件的樣式。如果有乙個全新的元件,任何被合理廣泛接受的元件都可以。
我們遵循的一般規則是「使用visual studio預設值」。
1. 我們使用allman樣式的大括號,其中每個大括號都從新的行開始。單行語句塊可以不帶大括號,但塊必須在自己的行上正確縮排,並且不能巢狀在使用大括號的其他語句塊中(示例請參見問題381)。乙個例外是,通過在同一縮排級別的下一行開始,允許using語句巢狀在另乙個using語句中,即使巢狀的using包含受控塊。
2. 我們使用四個空格而不是製表符。
3. 我們將_camelcase用於內部和私有字段,並盡可能使用readonly。為內部和私有例項字段加字首_,靜態字段加字首s_,執行緒靜態字段加字首t_。當用於靜態欄位時,readonly應位於static之後(例如static readonly而不是readonly static)。公共欄位應謹慎使用,使用時應使用不帶字首的pascalcasing。
4. 我們避免使用 this. 。除非絕對必要。
5. 我們總是指定可見性,即使它是預設值(例如private string _foo而不是string _foo)。可見性應該是第乙個修飾符(例如public abstract 而不是abstract public)。
6. 命名空間匯入應在檔案的頂部、命名空間宣告之外指定,並且應按字母順序排序,system.*命名空間除外,它將放在所有其他命名空間的頂部。
7. 任何時候都避免使用多個空行。例如,乙個型別的成員之間不能有兩個空行。
8. 避免虛假的空格。例如,避免if(somevar==0)…,其中點標記是虛假的空格。如果使用visual studio輔助檢測,請考慮啟用「檢視空白(ctrl+e, s)」。
9. 如果某個檔案的樣式與這些準則不符(例如,私有成員命名為 m_member 而不是 _member),則該檔案中的現有樣式優先。
10. 我們只在變數型別十分明顯時使用 var(例如 var stream = new filestream(...) 而不是 var stream = openstandardinput()).)。
11. 對於型別引用(例如 int、string、float而不是int32、string、single等)和方法呼叫(例如 int.parse(...) 而不是 int32.parse(...)),我們使用語言關鍵字而不是bcl型別。示例見第391期。
12. 我們使用pascalcasing來命名所有的常量、區域性變數和字段。唯一的例外是interop**,其中常量值應與通過interop呼叫的**的名稱和值完全匹配。
13. 我們盡可能使用 nameof(...),而不是 "..." 的名稱。
14. 欄位應在**頂部,並宣告型別。
15. 在源**中包含非ascii字元時,請使用unicode轉義序列(\u***x)而不是文字字元。文字非ascii字元偶爾會被工具或編輯器弄亂。
16. 當為 goto 語句使用標籤時,將標籤縮排乙個小於當前縮排的值。
我們在corefx儲存庫的根目錄下提供了乙個visual studio vssettings檔案(corefx.vssettings),使c自動格式化符合上述準則。請注意,vssettings不包括規則7和8,因為這些規則當前不受vs格式支援。
此外,對於非visual studio編輯器中的自動格式化,還在corefx儲存庫的根目錄下提供了editorconfig檔案(.editorconfig)。
我們還使用.net**格式化工具來確保**庫在一段時間內保持一致的樣式,該工具會自動修復**庫以符合上面概述的準則。
observablelinkedlist`1.cs:
using system;
using system.collections;
using system.collections.generic;
using system.collections.specialized;
using system.componentmodel;
using system.diagnostics;
using microsoft.win32;
namespace system.collections.generic
}public event notifycollectionchangedeventhandler collectionchanged;
public int count
}public observablelinkedlistnode addlast(t value)
protected virtual void oncollectionchanged(notifycollectionchangedeventargs e)
}private void insertnodebefore(linkedlistnodenode, linkedlistnodenewnode)
...}
}
observablelinkedlist`1.observablelinkedlistnode.cs:
using system;
namespace system.collections.generics
public t value}}
...}
}
微軟發布編碼風格強制工具StyleCop
制編碼風格是乙個長期被熱烈爭論的話題。人們不僅為團隊應該遵循何種編碼風格而爭論不休,同時還要爭論究竟是否應該確立乙個標準的編碼風格。現在,微軟發布了stylecop,這是他們在內部使用的乙個編碼風格強制工具,微軟的這一舉措無疑將起到推波助瀾的作用。stylecop,也即所謂的微軟c 源 分析器 mi...
Python3 2 官方文件教程 編碼風格
2.8 編碼風格 現在你準備寫出更長而複雜的python 了,也是該告訴你關於 python 的編碼風格時候了。很多語言可以用不同的風格進行編碼。有些風格比其他風格編寫的 更有可讀性。因此,讓別人能有輕易地讀懂你的 是一直是個好想法,並且養成這種良好的編碼風格將更大地幫助你。對於python pep...
C 編碼風格與規範
命名應該含義明確,不要為了節省空間使用縮寫。int n bad 無明確含義的單字母名稱 string cstmrname bad 非約定俗成的縮寫 int width,height ok 含義明確 int numcolors ok num屬於約定俗成的縮寫 for int i 0 i 100 i o...