這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
上篇轉帖的blog裡面提到了Go的特性,作為編寫Java時也可以給自己點編程風格的參考。
下面是提到的改進
下面簡單學習和分析一下重點的風格提示,領會Ken和Pike的編程思想:
規範的文法(不需要符號表來解析)記憶體回收(專屬)無標頭檔明確的依賴無循環相依性常量只能是數字int和int32是兩種類型字母大小寫設定可見度(letter case sets visibility)任何類型(type)都有方法(不是類型)沒有子類型繼承(不是子類)包層級初始化以及明確的初始化循序檔被編譯到一個包裡包package-level globals presented in any order沒有數實值型別轉換(常量起輔助作用)介面隱式實現(沒有“implement”聲明)嵌入(不會提升到超類)方法按照函式宣告(沒有特別的位置要求)方法即函數介面只有方法(沒有資料)方法通過名字匹配(而非類型)沒有建構函式和解構函式postincrement(如++i)是狀態,不是運算式沒有preincrement(i++)和predecrement賦值不是運算式明確賦值和函數調用中的計算順序(沒有“sequence point”)沒有指標運算記憶體一直以零值初始化局部變數取值合法方法中沒有“this”分段的堆棧沒有靜態和其它類型的注釋沒有模板沒有異常內建string、slice和map數組邊界檢查
介面隱式實現(沒有“implement”聲明)
適當使用Object類型,JFinal就這麼做的。效率很高。
嵌入(不會提升到超類)
多彙總,多組合,少繼承
方法按照函式宣告(沒有特別的位置要求)
能靜態方法就都靜態化,提高效率。還有可以將靜態方法放到一個工具類裡面,不初始化此類,直接調用。FastJson就是這樣做的。極大提高效率。
方法即函數
同上
介面只有方法(沒有資料)
interface裡面不聲明資料。Java社區之前爭論過很多的問題,go給出一個參考答案。
方法通過名字匹配(而非類型)
這個適量使用Object前提。
沒有建構函式和解構函式
不要依賴建構函式,可以考慮編寫init方法和destory方法,手動擷取,釋放連結和空間,提高效率。
postincrement(如++i)是狀態,不是運算式
慎用++
沒有preincrement(i++)和predecrement
不用++
賦值不是運算式
防止最2的==和=混淆
明確賦值和函數調用中的計算順序(沒有“sequence point”)
多用括弧。提高計算順序可讀性
記憶體一直以零值初始化
注意初始化的值。看情況是否要賦值初值。
方法中沒有“this”
哈,好東西。非常重要的提醒!!之前我在編程的時候隱隱約約覺得this不是很妥當。帶來大量的歧義和隱患。
沒有模板
Java的模板太噁心。雖然效率低下,但是還是要使用反射構造器。。。
沒有異常
少用異常做處理,能預測的故障盡量寫程式控制。
內建string、slice和map
找一個趁手的string,map工具。沒有的話,要自己寫一個,我選擇guava。
數組邊界檢查
注意越界,錯誤。所有的直接對數組的讀取之前都要判斷數組裡面的數值個數,千萬別越界。