2013-11-04 131 views
2

我發現自己有時寫代碼,看起來像這樣用Java泛型:龍(可讀)名稱/模板

/**Class description 
*@param <K> Key to '.....' 
public class Mappy<K>{ 
    ///class methods, fields, etc.... 
} 

有時使用單字符的名稱時,幾個月後,我回到代碼已造成減速和必須不停地滾動以記住「E」是什麼「T」&。但是最後我檢查了一下,Oracle的官方指南是單字符名稱,而我從來沒有見過Java程序員不這樣做。

在C#中,使用TDescription是官方風格指南的一部分,類似於Google &其他人使用Ixxxx作爲接口。但是我仍然可以在C#的產品代碼& API中看到單字母名稱。我聽說它在C++中類似。在Haskell & Ocaml,尤其是Haskell中,在函數簽名中使用'a'或'b'作爲通用參數(忘記編譯器/解釋器是強制執行還是可能是多字母形式)。

我只是問這個'問題',看看你們是怎麼做的:你堅持單字母名稱在你的泛型/模板/等...,你有像Txxx這樣的會議嗎?你給他們全面的名字(並且這會讓同事感到困惑),還是你做了其他的事情?

這與Breaking java generics naming convention?(我通過google找到)非常相似。我只想收集一些現代意見(看看在兩年半的時間裏是否發生過一次風格的政變),而不是回答這個問題。

編輯1:

也許這個問題想出的原因是,前幾天我做了一個承諾,轉儲變量「我」。太多次使用快速&髒循環變量'我'在嵌套循環中造成問題&重構,所以我決定只用完整的名稱。

+2

我想說如果單個字母的名字變得太混亂了,也許這意味着整個班級有點太混亂了。 – Kayaman

+1

我不能說一個行業接受的標準,但_通常從我個人的用途來講,如果我的泛型類只有一個泛型參數,並且沒有真正的_meaning_(例如,'List '),那麼我只需使用'T'。如果我的類有兩個或更多的參數,或者它們有一些特殊的含義,那麼我會給它們一個名稱,例如'TDescription',或者用於鍵/值對,也許是'TKey','TValue'。過去,我已經嘗試刪除描述類型的'T'前綴,但是我發現它讓我感到困惑,因此我的第一本能讀取代碼將其視爲已定義的類型。 –

+0

通常,除了進行一些高級元編程時,泛型將只有相對較少的參數來跟蹤。 'T'通常用於某些「類型」的實例,而'N'對於基於大小的值是常見的。沒有必要將'template '更改爲'template '。 –

回答

3

命名約定作爲幫助您維護可讀代碼的工具而存在。

他們在那裏幫助你。他們不是一個規則。
與盲目遵循命名約定相比,易於閱讀和維護的代碼具有更高的價值。

1

當類型可以是(幾乎)任何類型時,我在泛型中使用單字母大寫字母。像Map<K,V>

然而,當類型已經不僅僅是任何類型更多的含義,如:

public class Table<Column extends Enum<Column> & Table.Columns> { 
... 
public interface Columns { 
    ... 

我用一個更合適的名稱Column但保留首字母大寫的約定。我認爲保持類型的簡潔是很重要的,因爲您可能會在代碼中多次使用它。一個大寫字符是 - 你必須承認 - 完美簡潔。