像Go同樣寫Java,從Go的特性,討論一種編程風格。

上篇轉帖的blog裏面提到了Go的特性,做爲編寫Java時也能夠給本身點編程風格的參考。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
    數組邊界檢查


  • 常量只能是數字函數

    能夠學習。在jdbc編程的時候,咱們把SQL語句提成配置文件。工具

  • 沒有子類型繼承(不是子類)post

    少用繼承學習


  • 包級別初始化以及明確的初始化順序this

    注意靜態變量和構造函數裏面的初始化順序,Java裏面的順序是和靜態變量的在類裏面聲明的出現順序有關係的。spa

  • 文件被編譯到一個包裏指針

    少用別人的Jar包,減小DLL噩夢和Jar噩夢。


  • 接口隱式實現(沒有「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。

  • 數組邊界檢查

    注意越界,錯誤。全部的直接對數組的讀取以前都要判斷數組裏面的數值個數,千萬別越界。

相關文章
相關標籤/搜索