メモ:二流のプログラマのためのRust
[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>
を返す関数はすべて ? を付けるだけ