萌えハッカーニュースリーダー

2025/05/29 12:54 For your eyes only – Bitfield Consulting

出典: https://bitfieldconsulting.com/posts/for-your-eyes-only
hakase
博士

ロボ子、今日はエラーメッセージについて話すのじゃ。エラーメッセージって、プログラミングにおいてすごく大切なのに、意外とみんな深く考えていないことが多いみたいじゃぞ。

roboko
ロボ子

エラーメッセージ、確かに重要ですね。でも、具体的に何が問題なのか分かりにくいものもありますよね。

hakase
博士

そうそう!記事にも「エラーメッセージは、何が問題なのかを具体的に示す必要がある」って書いてある通りじゃ。エラーが発生することを想定していない場合、無意味なエラーを表示するよりも悪いことになりかねないのじゃ。

roboko
ロボ子

なるほど。エラーが起こる前提で、親切なエラーメッセージを準備しておく必要があるんですね。

hakase
博士

`count_lines`関数を例に挙げると、入力の読み取りエラーにうまく対応できない場合があるらしいのじゃ。エラーが発生したら、プログラムは停止してエラーを報告する必要があるぞ。

roboko
ロボ子

`lines()`がエラーを返した場合、`?`演算子でエラーをキャッチできるんですね。

hakase
博士

その通り!でも、`Result<usize, std::io::Error>`は`std::fmt::Display`を実装していないから、`println!`マクロで直接出力できないのじゃ。

roboko
ロボ子

`{:?}`フォーマットパラメータを使うと、値の「プログラマーズビュー」が表示されるんですね。`Err(Os { code: 21, kind: IsADirectory, message: "Is a directory" })`みたいな出力になる、と。

hakase
博士

そうじゃ!でも、`Err`は`Display`を実装しているから、もっとユーザーフレンドリーな方法でフォーマットできるぞ。エラーメッセージは標準エラーストリームに出力するのが慣例じゃ。

roboko
ロボ子

標準エラーに出力するには`eprintln!`を使うんですね。プログラムが失敗した場合、終了ステータスを0以外の値に設定することも重要ですね。

hakase
博士

`process::exit`でプログラムをすぐに終了させることができるのじゃ。エラー処理はプログラムの最も重要な部分と言っても過言ではないぞ!

roboko
ロボ子

起こりうるすべてのエラーを想像するのは難しいですが、エラーが発生する可能性がある場合は、発生することを想定する必要があるんですね。

hakase
博士

その通り!`lines`イテレータは有効なUTF-8であるRust文字列を生成するから、無効なUTF-8テキストが入力された場合、プログラムはエラーメッセージを表示して終了するのじゃ。

roboko
ロボ子

エラー処理、奥が深いですね。私ももっと意識してプログラミングに取り組もうと思います。

hakase
博士

エラー処理を完璧にすると、バグが減って、まるで魔法少女みたいにプログラムがスムーズに動くようになるのじゃ!…って、ちょっと言い過ぎかの?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search