15日から18日の分までのrustの勉強記録

TRPL pp.286-303

12章の続き

コマンドラインオプションではなく、代わりに環境変数を使用するように変更する

TDD:

  1. 失敗するテストを書く
  2. 古いテストを変更し、すでに実装済みの機能を誤って壊してしまわないことを保証
  3. 失敗する実装を作る
  4. 実装する

使っていたメソッド:

引数と環境変数で同じ設定を行うことができるプログラム、そして、どちらが優先されるかを決定している、そんなプログラムを作る課題は解いた。

出力について

この差異のおかげで、エラーメッセージを画面に表示しつつ、プログラムが成功して出力をファイルに李大レスことすることをユーザーは選択できる。

どのように標準出力に書き込まれているか。

求めるもの: エラーメッセージは標準エラーに出力され、成功した状態のデータのみはファイルに残ること

標準エラーストリームに出力するマクロeprintln!(標準出力ストリームではない)

13章

関数型言語に影響された機能の一部、

クロージャ

クロージャは

時間のかかる関数を2回呼び出しているケースで、どうやってリファクタしていくかで使い方を学んでいく。

関数でリファクタリング

関数への重複した呼び出しの結果を変数に抽出しよう

結果が本当に必要なところだけコードを実行したい

クロージャでリファクタリング

呼び出しの結果を保存するのではなく、コードを定義するクロージャを変数に保存する

let name = |x| {
    ...
    v
};

複数回コードを呼び出す問題の再修正については、クロージャーが解決策を提供する。

クロージャ定義に型注釈がない理由、および、クロージャに関わるトレイトについて

クロージャ定義には、引数それぞれと戻り値に大して推論される具体的な型が1つある。 だから、2つの異なる型でクロージャーの呼び出しを試みると、1つ目の呼び出しの時点で型が推論されるので、2つ目の呼び出しで型エラーとなる。