⛳
unwrapとexpectでpanicやめろ高校校歌
Rustにおけるエラーハンドリングの重要性を説く校歌を生成しました。
1番
おお新米Rustaceanよ 若人よ
安易に unwrap を使うな
その値は本当に Some か
その処理は絶対に Ok か
「あるはず」という思い込みは捨てよ
その Option は None に化けるのだ
おお若人よ その確信は脆い
clippy::unwrap_used を恐れよ
しかし unwrap を使うな
2番
おお実装者よ 若人よ
言い訳のために expect を使うな
メッセージを書けば許されると思うな
その文字列はデバッグの助けにはなるが
プロセスが死ぬ事実は変わらぬ
「設定ファイルがない」と叫んで死ぬな
デフォルト値を作るか Result を返せ
clippy::expect_used で己を律せよ
本番環境で停止は許されぬ
3番
おおライブラリ作者よ 若人よ
マクロで panic! を叫ぶな
todo! を残したままコミットするな
それは呼び出し元の責任か 実装の敗北か
制御フローを放棄してはならぬ
全てを ? 演算子で繋いでいけ
clippy::panic の警告に耳を傾けよ
若人よ 型システムへの信頼を損なうな
エラーは値として扱え
4番
おお型に守られし 若人よ
コンパイルエラーに疲弊する若人よ
ボローチェッカーの無慈悲さに打ちひしがれ
match 式のネストに一喜一憂し
それでも堅牢なコードを愛する若人よ
夜中にアラートで叩き起こされぬ
平穏なその日のために Result を解け
おお我らが unwrap と expect で panic やめろ高校
おお我らが unwrap と expect で panic やめろ高校
文脈
設定
#![deny(clippy::unwrap_used)]
#![deny(clippy::expect_used)]
#![deny(clippy::panic)]
Cargo.toml
[lints.clippy]
unwrap_used = "deny"
expect_used = "deny"
panic = "deny"
禁止できるもの
Option::unwrap()
Result::unwrap()
Result::unwrap_err()
Option::expect()
Result::expect()
Result::expect_err()
std::panic!
禁止できないもの
Option::unwrap_or()
Option::unwrap_or_default()
Option::unwrap_or_else()
Option::unwrap_unchecked()
Result::unwrap_err_unchecked()
Result::unwrap_or()
Result::unwrap_or_default()
Result::unwrap_or_else()
Result::unwrap_unchecked()
std::todo!
std::unimplemented!
std::unreachable!
謝辞
- Cloudflare
- Gemini 3 Pro Preview
- Xにあった校歌
- Xにあった情報
参照
Discussion