Go読書会 #8 がランサーズ株式会社で行われたので進捗と技術的なメモ書きを書いておきます。読書会の内容はプログラミング言語Goを冒頭から皆で読み進めていくというものです。
進捗した内容
- 5章 関数
- 5.3 複数戻り値
- 5.4 エラー
- 5.4.1 エラー処理戦略
- 5.4.2 ファイルの終わり(EOF: End of File)
- 5.5 関数値
- 5.6 無名関数
- 5.6.1 警告:ループ変数の捕捉
- 5.7 可変個引数関数
話題に上がった話
5.3 複数戻り値
ここでは、Goの複数返値と例外がない理由
について話題になりました。例外(exception)がない理由はこちらに書かれていまして、複数戻り値が返るのとエラーへの設計思想とでこうなっているということでした。あとは、空リターン(bare return)を使うと、名前付き返値を持つ関数の値が帰るところが興味深かったです。ただし、その記述の直後にこの機能は余り使わない方がいいという但し書きが書かれていたので使うときは気をつけたいです。
5.4.1 エラー処理戦略
ここでは、Goのエラー処理に対する取り組み方が話題になりました。最近の言語の場合は例外を発生させてそこにスタックトレースを出力させて発生したエラーの内容を表示する方式ですが、Goの場合は通常のifなどのフローを使用をして報告するようにしていている点が特徴的でした。
5.5 関数値
ここでは、ファーストクラス値(first-class value)
であることが話題になりました。概ねこのような話だということで、関数から返したり、関数に渡したりすることが出来るところのメリットについて話になりました。一番簡単なところだと、例題にも出ているフローと実際に処理をする部分を分けたりすることができてコードに汎用性がでたりするところとかでしょうか。参加者のかたから話題にからめて関数型の話がでてきてちょっと盛り上がりました。
5.6 無名関数
ここでは、無名関数のメリットについてが話題になりました。簡単なところでいうと、関数の外部からアクセス出来る必要の無い処理を内部に書けたり、このあと出てくる並列処理をgoに渡すときに楽に書けるとか、命名する必要がない処理をまとめられるとか素言うところじゃないかと思います。
5.6.1 警告:ループ変数の捕捉
この話は、forループで変数がメモリの位置を共有することにより、先程出てきた無名関数などを組み合わせて実行すると予想外の実行結果になるという話です。これは、慣れてない人ははまりますね。気をつけたいです。
ここまで読んだところで時間になりました。次回は 5.8 関数遅延呼び出しからです。