Go言語に少し触れた

昨日、A Tour of Goを少しみてみた。

パラパラとめくりながらfor文あたりまで読んでみたけど、なかなか良いと思った。コンパイル言語っぽいし、身につけるのもありかな。

個人的に良いなと思った部分。

型宣言  識別子、型の順番に定義するところ。たしかに関数ポインタの書き方も可読性が高まるし、C言語とかによくある「型 識別子」の順番だと、宣言の理解時に視線が一旦戻る。(識別子Aは、int型のように識別子名を認識してからその型を把握してる気がする)

それならGoのように書いて貰えば、「identA (is) int (type).」のように人間が読みやすい語順かと思う。

var i int = 3

Named return values 名前付き返り値とでも訳すのかな? 返り値に名前をつけておけば関数内部で変数のように使えるし、returnで明示的に値を指定しなくても暗黙的に返してくれる。

If with a short statement if文の評価式で使うための変数宣言(とか、事前計算みたいなの)をif文でかける。Cでもif文の評価式で変数宣言と代入はできた気がするけど、一見わかりにくいし、if文の外で事前処理すると評価用の変数のスコープが広くなったりして良くない。

// BMIからメタボか判定する関数。本来BMIだけで判断するものではないけど。
func isMetabo(h, m float64) bool {
    // ↓このBMI変数みたいに、" 評価に使う文; 評価式"のようにかける
    if BMI := h * h / m; BMI > 25.0 {
        return true
    }
    return false
}

Switch-caseが値じゃなくてもいい 衝撃。文字列によって処理を切り分けたいとか当然あるわけだけど、Cだと似たようなif文がむちゃくちゃ並んで読みにくかった。文字列の内容だけの分岐で保てばまだいいけど、あとかた修正する人が文字列+アルファの条件を同じレベルに入れちゃって読みにくくなったりね。 goだとcase "文字列"みたいにかけるから、コードが読みやすいと思う。 (コンパイラ作るのに使いやすそう!)

switch keyword {
    case "umi":    // caseに文字列をかけるから見やすい?
        swim()  // 各caseには暗黙的にbreakが入る。
    case "kawa":
        swim()
    case "yama":
        climb()
}

とりあえずこのあたりくらいまで見てみた。面白そうだからもうちょっと読んでみようかな。