メモ:二流のプログラマのためのRust
&'a strではなくStringを使う&'a [T]ではなくVec<T>を使う- 流れるように自然に
.clone()する “早く何度もcloneせよ” - ただしコンパイラがライフタイムエラーを出さないかぎりにおいて参照を使ってもいい
- enum/structには
#[derive(Clone, Debug, Default)]をつけておく - enumのデフォルト値には
#[default]をつけておく - 関数から参照を返すのは罪、structのメソッドから参照を返すのはだいたいOK
- 引数に
Stringと&strの両方を渡せるようにするため、- 関数の引数は
s: impl AsRef<str>とし、s.as_ref()で使う - 構造体の new メソッドは
s: impl Into<String>とし、s.into()で owned String にする
- 関数の引数は
- 常に独自の Error enum を定義する
- thiserror マクロを使い Error enumを作る
- エラーの constructor は
thiserror_ext::Constructで定義する - Rustの標準ライブラリが返すエラーを独自エラーに変換するため、 thiserror の
#[from]マクロを使う Result<T>を返す関数はすべて ? を付けるだけ