7章エラー処理

もたもたしてたら、こうなることはわかっていた。

−George Bernard Shaw†1、死に際して

[†1] 訳注:19世紀から20世紀にかけて多彩な分野で活躍した、アイルランドの文学者、教育者、政治家。

Rustのエラー処理手法は、1章を割くに値するほど他の言語と異なる。難しいわけではないが、多くの読者にとってなじみのないものだ。本章は2つの異なる種類のエラー処理、パニックとResultについて説明する。

通常のエラー処理にはResult型を用いる。Result型は、典型的にはプログラム外部の要因、すなわち間違った入力、ネットワーク切断、権限の問題、などによって生じた問題を表現するために用いられる。これらの事態が起こるのはわれわれのせいではない。プログラムにバグがなかったとしても、このようなことは時々起こるものだ。本章のほとんどはこの種のエラーの説明に費やすが、その前に、より簡単なパニックの方を説明しよう。

パニックは通常ではない種類のエラー、すなわち起こってはいけない種類のエラーの処理に用いる。

7.1 パニック

プログラム中でパニックが起こるのは、何かプログラム自身のバグに起因すると思われる問題が発生したときだ。例えば以下の状況が考えられる。

  • 配列の範囲外へのアクセス
  • 整数のゼロによる除算
  • ErrであるResultに対する.expect()の呼び出し
  • アサートの失敗

(プログラマ自身がコード中で何かおかしいことを発見した際には、panic!()マクロでパニックを直接起こすこともできる。panic!()マクロでは、println!()スタイルの引数でエラーメッセージを生成する。)

上に列挙した状況すべてに共通するのは、はっきり言って、プログラマの過ちだということだ。こういうときに大事なことは、まず「落ち着け(Don’t ...

Get プログラミングRust 第2版 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.