星期一, 1月 29, 2018

Coding style guide


忘了從哪抄來的 XD
把自己常用的語言排前面
不過GO真的是不錯,存檔時就先排好,寫不對還不給你Compile
PHP我還得靠hook來做,新的語言就是不一樣

Style guide
Code change should conform to the programming style guide of the respective languages:

  • Go: https://github.com/golang/go/wiki/CodeReviewComments
  • PHP: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md
  • Java: https://google.github.io/styleguide/javaguide.html
  • JavaScript: https://github.com/airbnb/javascript
  • Android: https://source.android.com/source/code-style.html
  • C#: https://msdn.microsoft.com/en-us/library/vstudio/ff926074.aspx
  • C++: https://google.github.io/styleguide/cppguide.html
  • Haskell: https://github.com/tibbe/haskell-style-guide/blob/master/haskell-style.md
  • Groovy: http://groovy-lang.org/style-guide.html
  • ObjC: https://github.com/NYTimes/objective-c-style-guide
  • Perl: http://perldoc.perl.org/perlstyle.html
  • Python: https://www.python.org/dev/peps/pep-0008/
  • Ruby: https://github.com/bbatsov/ruby-style-guide
  • Scala: http://docs.scala-lang.org/style/
  • Swift: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html
  • TypeScript: https://github.com/Microsoft/TypeScript/wiki/Coding-guidelines

星期日, 1月 14, 2018

該來打地鼠了 GOGOGO

最近有認真讀了一下golang,感覺真的滿不錯的
針對現在的開發/佈署環境特性設計的,果然可以稱一下modern language

最吸引我的地方是套件及佈署的部份,因為這是我的痛點
在公司治理連年得名的地方,資安管理非常機車嚴謹!!!
NO YUM, NO FTP, NO INTERNET...
想像拔掉網路線把環境裝起來... 我是說真的(泣)

裝個PHP會裝起肖!!!
常遇到要裝1個rpm要抓30多個dependency packages
最近要升php 7... 真是瘋了!!!
p.s. 感謝有docker,雖然一樣得一個個rpm抓來裝,但已經方便多了

用java有好一點,只要把jar包進來就好,但maven一樣沒辦法直接抓
另外也被規定只能用jboss,對mircroservice而言不太適合
再者java開發挺花時間,要多寫很多code
以前沒感覺,接觸Coding Convention後,就真覺挺花時間的

還有還有~ compile花時間... 用慣PHP,再回來寫java就覺得開發很慢
如圖


抱怨了好多,快來看一下,只留自己想講的
其他看文章

Reference




  • Simple
  • 效能
  • 簡易的library管理
    Go 原生大多數的Library, 還沒真的拿來開發所以還沒遇過,但即使沒有,看起就像npm裝一下就好了
    沒有對外的網路,也是把library抓進來放就搞定
    這對我太重要了!!!
  • 易部署
    compile後,只有一個binary檔案,不用再zip有的沒的
    感覺沒什麼,不就是少寫一些deploy script!?
    嘖嘖!這可以大大減少維護成本呀!!!
    公司治理連年得獎的公司,上線一定還有Rollback plan,有時舊沒跑,真發生問題還不敢執行
    而且這種公司一定有分權限,寫script的人,跟實際執行的人一定不同人
    也就是說出錯了,懂的人看不到,看到的人不懂... 讓我死算了...

    而且而且
    Go把Code及library整個包進去,不同環境的Server不需要安裝套件就可以執行
    光這點就不知道為此付多少血淚,我可以擺脫rpm dependency hell了!!! (泣)
  • 更易用,更強大的執行緖 - Goroutines
    Goroutine就像輕量級的執行緒,但稱其為併發,效能都是原生級的,範例如下
    func main {
    go loop //併發,程式會繼續往下走
    }
    跟java寫thread比起來,還真的更簡單,嘖嘖
其他補充
  • 沒有Exception
    我一直推不要用error code來判斷,用try-catch
    try放happy path, exception就放exception,這樣程式碼很乾淨

    沒想到golang居然沒有!?
    一開始還滿難想像,也很難接受,本以為是一群怪咖對c狂熱導致
    仔細讀一下,似乎還滿有道理的
    作者認為try-catch-finally會導致convoluted code (不會翻譯,盤旋形的程式碼... 嗯 大概有抓到意思)

    最後直接比一下,似乎還真的比較"simple"
    
    //java 
    try {
    } catch (Exception ex)
    }
    
    
    //go
    if err != nil {
    // handle the error
    }

    如果有多個就用switch,替代多個exception也是夠
    
    if err != nil {
    switch err.(type) {
    case *ErrZeroDivision:
    fmt.Println(err.Error())
    default:
    fmt.Println("What the h* just happened?")
    }
    }
    不過敢拿出來嗆是因為go有multi-value returns,還真的挺方便的
    如下例算平方根,如果只能return數字,那靠throw exception會比較好接
    但如果可以分別回error及result,那就很好接了
    
    func Sqrt(f float64) (float64, error) {
        if f < 0 {
             return 0, errors.New("math: square root of negative number")     
        }     
        // implementation 
    }  
    
    f, err := Sqrt(-1) 
    if err != nil {     
        fmt.Println(err) 
    } 


    好像真有點被說服了...
    讓我想起一位前輩說,科技進步,有時會推翻像地球是平的那種不可能改變的想法

    Reference
  • No type hierarchy
    很多新觀念得再讀了