通常はエラー型の方を固定します。先ほどの整数のパースの例は、こう書き換えることもできます。使うエイリアスを定義したほうが便利だからです。すれば、同じことを何度も書かずに済みます。モジュールの型エイリアスを使っていることが、明確にわかるようになっています。起こし、プログラムをアボートするようなメソッドについて、私がきっぱりと否定する方針をとっていたことに気づいたかもしれません。これは良いアドバイスです。使うのが賢明なこともあります。使用を正当化できるのかについては、グレーな部分があり、人によって意見が分かれます。まとめたいと思います。即興で書いたサンプルコード。サンプルコードや簡単なプログラムを書いていて、エラーハンドリングが単に重要でないこともあります。便利さは、とても魅力的に映るでしょう。これに打ち勝つのは難しいことです。パニックがプログラムのバグの兆候となるとき。コードの中の不変条件が、ある特定のケースの発生を未然に防ぐとき(例えば、空のスタックから取り出そうとしたなど)、パニックを起こしても差し支えありません。することでプログラムに潜むバグが明るみに出るからです。失敗のような明示的な要因によるものだったり、配列のインデックスが境界から外れたからだったりします。これは多分、完全なリストではないでしょう。メソッドを使う方がいいでしょう。与えられたメッセージを表示するところが異なります。この方が結果として起こったパニックを、少し扱いやすいものにします。値に対してアンラップが呼ばれました」というメッセージの代わりに、指定したメッセージが表示されるからです。私のアドバイスを突き詰めると、よく見極めなさい、ということです。私の書いた文章の中に「決して、Xをしてはならない」とか「Yは有害だと考えよう」といった言葉が現れないのには、れっきとした理由があります。あるユースケースでこれが容認できるかどうかは、プログラマであるあなたの判断に委ねられます。私が目指していることは、あなたがトレードオフをできるかぎり正確に評価できるよう、手助けをすることなのです。これでRustにおけるエラーハンドリングの基礎をカバーできました。アンラップについても解説しました。標準ライブラリをもっと探索していきましょう。扱うことが、いま目の前にある次なる課題です。これが、このセクションの残りの大半に共通する、主要なテーマとなります。ために定義されたコンビネータについてでした。これらのコンビネータを使うと、様々な処理の結果を明示的な場合分けなしに組み合わせることができました。現実のコードは、いつもこんなにクリーンではありません。型が混在していることもあるでしょう。それらのコンビネータに関する知識を動員して、これを書き換えましょう。エラーを適切に処理し、もしエラーが起こっても、プログラムがパニックしないようにするのです。これらを直接合成することはできません。が)コマンドライン引数を返さなかったということは、ユーザーがプログラムを正しく起動しなかったことを意味します。argument:引数を最低1つ指定してください。この例では、いくつか新しいことがあります。コンビネータを使ったことです。変換する方法の一つです。ときに使われるエラーを指定する必要があります。部分に対して関数をマップするところが異なります。そのまま変更せずに返します。用法により)エラーの型を同じに保つ必要があったからです。変換しなければならなかったわけです。入出力と共に入力をパースすることは、非常によく行われます。私がRustを使って個人的にやってきたことのほとんども、これに該当しています。IOと様々なパースを行うルーチンを、エラーハンドリングの例として扱っていきます。簡単なものから始めましょう。ここでのタスクは、ファイルを開き、その内容を全て読み込み、1つの数値に変換することです。掛けて、結果を表示します。することで、エラーハンドリングではなく、本来解決すべき課題に集中できます。適切なエラーハンドリングが必要とされる場所を教えてくれます。ここから始めることをコーディングへの取っ掛かりとしましょう。その後、リファクタリングによって、エラーハンドリングを改善していきます。ファイルパスとして、どんな文字列でも受け付けるので、エルゴノミックになります。リターン型からわかります。型も見ることになるでしょう。