🐋
ネストは浅く、スコープは短く
先日下記の記事を投稿した
再掲すると、下記2パターンのどっちの書き方が正解か分からないという話
// 途中変数パターン
a := A()
b := B(a)
c := C(b)
d := D(c)
e := E(d)
// 合成関数パターン
e := E(D(C(B(A()))))
投稿後、いろいろ検討したら途中変数パターンが正解という結論に至った
なぜ悩んでいたか
タイトルにある通り、コードを書くときは可読性を考慮してネストは浅く、スコープは短くすべきであると考えています。途中変数パターンではスコープが必要以上に長くなり、合成関数パターンではネストが深くなってしまうのでどちらを重視すべきかが判断が難しかったです。
どうすればいいか
途中変数パターンの変形ですが、下記のようにするとスコープの問題はある程度解決します
e := func(){
a := A()
b := B(a)
c := C(b)
d := D(c)
return E(d)
}()
即時実行関数を使ってネストを一つ追加することで途中変数のスコープを短く保ちます。スコープが短いので変数名が適当でもあまり問題にならなくなります。また、即時実行関数を使わなくてもそもそも関数そのものが十分短ければスコープが必要以上に長くなってもあまり問題にはなりません。記述量が増えるのは気に食いませんがGo言語ってそういうもんかなと割り切ることにしました。
Discussion