はじめに
https://doc.rust-jp.rs/book-ja/ch13-01-closures.html のrustの記事がすごいわかりやすかったので、Goで試してみました。スライドもあるので貼っておきます。
クロージャを使わない例
Go Playground
caluculateTrainingReps()
をすごい重い処理として考える。
generateTrainingMenu()
では、入力に基づいてトレーニングプランを出力するビジネスロジックが含まれる。
ビジネスロジックが含まれるgenerateTrainingMenu()
では変更が入る可能性が高い。
generateTrainingMenu関数の期待される振る舞いは、まずユーザが低強度のトレーニング(25より小さい数値で表される)か、 高強度のトレーニング(25以上の数値)を欲しているか確認することです。
- 最初のifで重い処理を2回呼び出す必要性がある
caluculateTrainingReps
が変更されたら、影響箇所が大きい
関数でリファクタ
Go Playground
クロージャを使用する
カリー化
カリー化すると、
また、ここで、add100 := add(100)
のように新しい関数を作ることを 部分適用 という。
高階関数
https://canopas.com/function-types-and-higher-order-functions-in-go-8ea2e95d1860
コールバック
無名関数
クロージャ
関数の合成
エラーハンドリング
テスト
テスト用のモック関数は、高階関数を使用して実現できる。
パフォーマンスに関する考慮事項
不要な関数呼び出しを最小限に抑えることで、パフォーマンスを最適化できます。オーバーヘッドを削減するためにクロージャを使用する例を次に示します。