Java编码约定被认为是有害的
GNUmakefile生成文件的首選名稱。 我們使用gnumake來構(gòu)建我們的軟件。 gnumake建立Java項(xiàng)目? 螞蟻被認(rèn)為是老派, 行家也被認(rèn)為是老派。 誰使用make來構(gòu)建WAR,JAR,生成JavaDoc ...? 3.1.1開頭注釋 : 所有源文件都應(yīng)以c樣式注釋開頭,該注釋列出了類名稱,版本信息,日期和版權(quán)聲明:將類名稱放入注釋中以開始文件嗎? 如果我改變主意并稍后重命名課程怎么辦? 那“ 日期 ”應(yīng)該代表什么? 有人使用各種占位符通過版本控制系統(tǒng)自動插入文件的最后修改時間。 好吧,VCS可以告訴您文件的創(chuàng)建時間或最后修改時間-一次又一次地修改同一行會使合并變得非常痛苦。 4 –縮進(jìn) : 應(yīng)使用四個空格作為縮進(jìn)單位。 縮進(jìn)的確切結(jié)構(gòu)(空格與制表符)未指定。 制表符必須每8個空格(而不是4個)正確設(shè)置。 可能是文檔中最違反直覺的部分。 有些人喜歡空格,其他人(包括我)則喜歡制表符。 品味和團(tuán)隊(duì)安排有關(guān)。 但是本指南建議同時使用兩者,有時用制表符替換空格。 是“ 未指定 ”。 我的建議:使用選項(xiàng)卡,讓每個開發(fā)人員將其IDE配置為具有所需的大小凹痕。
4.1線長
避免使用超過80個字符的行,因?yàn)樵S多終端和工具無法很好地處理它們。
80個字符? 我的筆記本電腦可以輕松容納三倍。 在一行中爭取使用120-140個字符,但不要使用硬包裝。 我個人只是顯示垂直邊距,
右行的長度由可讀性決定。 順便說一句,以下是來自各種庫和框架的類的幾個示例:
- SQLIntegrityConstraintViolationException (JDK SQLIntegrityConstraintViolationException個字符)
 - AbstractInterruptibleBatchPreparedStatementSetter (Spring框架,50個字符)
 - AbstractDataSourceBasedMultiTenantConnectionProviderImpl (休眠,56個字符)
 - PreAuthenticatedGrantedAuthoritiesWebAuthenticationDetails (Spring Security,58個字符)
 
而且我們假設(shè)整行可以容納80個字符嗎?
5.1.2單行注釋 :
if (condition) {/* Handle the condition. */... }以防萬一代碼不夠自我描述,我建議使用更好的注釋:
if (condition) {/* This block is executed if condition == true. */... }5.1.3尾隨評論 :
if (a == 2) {return TRUE; /* special case */ } else {return isPrime(a); /* works only for odd a */ }您的意思是(并且即使沒有評論也不要告訴我它的可讀性較差)?
return a == 2 || isPrime(a);6.1每行編號 :
int level; // indentation level int size; // size of table當(dāng)我們有注釋時,為什么要使用描述性變量名! 考慮一下這個:
int indentationLevel; int tableSize;在該部分的后面: 絕對不要在同一行上聲明變量和函數(shù)。 例:
long dbaddr, getDbaddr(); // WRONG!當(dāng)然,這是錯誤的,甚至無法編譯。 我很驚訝沒有提到“ 不要在變量名中放置空格 ”是一種好習(xí)慣……
6.3放置 :
僅在塊的開頭放置聲明。 […]不要等到第一次使用變量時才聲明它; 它會使混亂的程序員感到困惑[…]這是編碼約定希望您編寫代碼的方式:
int min; //inclusive int max; //exclusive int distance; List<String> list; //one per each itemmin = findMin(); max = findMax(); distance = max - min; list = new ArrayList<>(distance); //...這是應(yīng)如何編寫以避免混淆:
final int minInclusive = findMin(); final int maxExclusive = findMax(); final int distance = maxExclusive - minInclusive; final List<String> listOfItems = new ArrayList<>(distance); //...除此之外,我們最終可以(使用nomen est omen )使用final關(guān)鍵字。 本節(jié)后面的代碼示例顯示了類字段缺少private修飾符(默認(rèn)為包私有訪問)的情況。 包私人領(lǐng)域?
7.3返回聲明 :
return (size ? size : defaultSize);也許您沒有注意到,但是從上下文中我們可以看出size和defaultSize都是boolean類型。 沒錯, size和defaultSize可以為true或false (!)這是違反直覺的! 從這樣的文檔中,我不僅期望句法正確性,而且期望有意義的代碼和良好實(shí)踐! 此外,表達(dá)可大大簡化, 一步一步 :
size ? size : defaultSize size ? true : defaultSize size || defaultSize7.5聲明 :
空的for語句(其中所有工作都在初始化,條件和更新子句中完成)應(yīng)具有以下形式:
for (initialization; condition; update); 
 ' 
 空for語句 '? 為什么要使用空的for語句? 這是令人困惑的 ,應(yīng)避免,不應(yīng)在官方語言指南中予以鼓勵和描述。 
獎勵測驗(yàn):此代碼在C語言中的用途是什么?
while(*dst++ = *src++);我相信每個計(jì)算機(jī)程序員都應(yīng)該理解上面的代碼片段。 即使您使用Ruby或TSQL進(jìn)行編程。
7.8 switch語句 :
每次遇到case (不包括break語句)時,請?jiān)赽reak語句通常所在的位置添加注釋。
 
 我了解意圖,但做法是錯誤的。 不要記錄意外的和容易出錯的代碼片段,而要避免它們。 不要依賴失敗,根本不要使用它。 
8.1空行 :
在以下情況下,應(yīng)始終使用一個空白行:
[…]- 在方法的局部變量及其第一條語句之間
 - 在塊[…]或單行[…]注釋之前
 - 一種方法內(nèi)部的邏輯部分之間,以提高可讀性
 
 
 看來作者建議使用空行來分隔“ 方法的邏輯部分 ”。 好吧,我稱這些部分為“ 方法 ”。 不要將語句分組在方法內(nèi)部的塊中,對其進(jìn)行注釋或彼此分開。 而是將它們提取到單獨(dú)的,命名良好的方法中! 
在變量聲明和第一個語句之間放置空白行聽起來像是從C語言書中摘錄的。
8.2空格 :
- 除以外的所有二進(jìn)制運(yùn)算符. 應(yīng)該用空格將其操作數(shù)分隔開。 空格絕對不能將一元運(yùn)算符(例如一元減號,增量(' ++ ')和減量(' -- '))與其操作數(shù)分開。 例:
 
這甚至無法在Java中進(jìn)行編譯 …
9 –命名約定 (僅PDF版本 ):
char *cp;cp是Java中char指針的一個好名字。 等等, 什么 ? Java中的char 指針 ?
10.1提供對實(shí)例和類變量的訪問 :
 
 沒有充分的理由就不要公開任何實(shí)例或類變量。 真的, 真的是很好的理由! 我曾經(jīng)使用過public場所嗎? 
10.4變量賦值 :
if (c++ = d++) { // AVOID! (Java disallows)... }極好的建議:請避免使用甚至無法在Java中編譯的構(gòu)造。 這使我們的生活變得更加輕松!
10.5.2返回值 :
if (booleanExpression) {return true; } else {return false; } 應(yīng)該改為 
 
圣牛, 我同意!
摘要
并不是Java編程語言的官方代碼約定是完全錯誤的。 它們只是過時和過時的。 在二十一世紀(jì)的第二個十年中,我們擁有了更好的硬件,對代碼質(zhì)量的更深刻理解以及更現(xiàn)代的智慧資源 。 代碼約定…上一次發(fā)布是在1999年,它們受到C語言的極大啟發(fā),沒有意識到數(shù)以百萬計(jì)的開發(fā)人員尚未編寫的代碼行。 就像設(shè)計(jì)模式一樣,代碼約定應(yīng)該隨著時間的流逝而出現(xiàn),而不是明確給出。 因此,請不要再引用或遵循官方指南的建議。
參考: Java 和社區(qū)博客上的JCG合作伙伴 Tomasz Nurkiewicz 認(rèn)為Java編碼約定有害 。
翻譯自: https://www.javacodegeeks.com/2012/10/java-coding-conventions-considered-harmful.html
總結(jié)
以上是生活随笔為你收集整理的Java编码约定被认为是有害的的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 养兔子的注意事项 养兔子应该注意什么
 - 下一篇: Spring Security可以做的十