inflearn logo
知識共有
inflearn logo

洗練された Rust 中級(5)- Option & Result

OptionとResultに出会うと、まずunwrap()から使っていませんか?値がない場合と処理が失敗した場合を区別し、map、and_then、?で処理のステップをつなぐ方法を学びます。実行可能な例と総合演習を通して、エラーをどこまで伝播させ、どこで処理するかを自分で判断できるようになります。

12名 が受講中です。

難易度 中級以上

受講期間 無制限

Rust
Rust
Rust
Rust

受講後に得られること

  • 値が存在しない場合と失敗した場合を区別して、OptionとResultで表現できます。

  • unwrap()の代わりに、状況に応じたデフォルト値の処理方法とエラー処理方法を選択できます。

  • map、and_then、?を使って複数の処理ステップを簡潔につなげられます。

  • collectとtransposeで複数の結果を集めたり、ネストされたOptionとResultを変換したりできます。

  • エラーの種類を列挙型として定義し、呼び出し元に伝えるエラーと直接処理するエラーを区別できます。

値がなかったり失敗したりしても、次の動作が明確なRustコードを書く

Rustコードを書いているとOptionとResultによく出会います。最初はunwrap()で値を取り出しますが、入力がなかったり、予想と異なる値が入ってきたりした場合にどう処理すべきか悩むようになります。

この講義では、値がない場合と処理が失敗した場合を区別することから始めます。デフォルト値を設定し、複数の処理ステップをつなぎ、エラーを呼び出し元に伝える方法を順に学びます。API名を暗記するのではなく、関数を呼び出す側が何を知っておく必要があり、どのような判断を下すべきか見ていきます。

ユーザー入力を検証したり文字列を数値に変換したり、ファイルを読み込んだり複数の処理結果をまとめたりする際に適用できます。例を実際に実行し、総合演習を完成させながら、エラー処理コードを自分で設計する練習をします。

このような内容を学びます

(1) Optionで値がない場合の扱い方

SomeとNoneの意味を理解し、値がないときにデフォルト値を使用するか、そのまま渡すかを判断します。unwrap_orとunwrap_or_elseの違いを見て、mapとand_thenで値の変換をつなげます。所有権を移さずに内部の値を借用したり、takeで値を取り出したりする方法も学びます。

mapとand_thenの違い

(2) Resultで失敗の理由を表現する

OkとErrで成功と失敗を区別し、失敗した理由をコードに含めます。map_errでエラー型を変更し、列挙型で異なるエラーを表現します。無条件に値を取り出すのではなく、呼び出し側で失敗に対応できるように関数を作成します。

(3) ?でエラーを伝播し、必要な箇所で処理する

?が値を取り出す場合と、関数から早期リターンする場合を見ていきます。関数の戻り値の型に応じて?をどのように使うべきかを理解し、ライブラリでエラーを伝えることと、プログラムでユーザーに通知することを区別します。

?で簡潔な関数を書く

(4) 複数の結果をまとめ、ネストされた型を整理する

collectで複数のResultを1つの結果にまとめ、処理中にエラーが発生すると何が起こるのかを確認します。ok_or、ok、transposeを使ってOptionとResultを変換しながら、どの情報が保持され、どの情報が失われるのかも見ていきます。

(5) 総合演習とクイズで理解度を確認する

入力値を変換し、計算エラーを区別する関数を自分で実装します。正常な入力だけでなく、値が存在しない場合や不正な入力が渡された場合もテストします。最後のクイズでは、コードの実行結果とAPIを選んだ理由を確認し、学んだ内容を整理します。

受講前の注意事項

実習環境

  • RustとCargoを実行できるWindows・macOS・Linux環境が必要です。

  • Rust 2024エディションをサポートする安定版のRustをご用意ください。

  • 普段使用しているコードエディターとターミナルで演習できます。

学習教材

  • 各章の解説とコードを収録したウェブ教材

  • Cargoで直接実行できるサンプルソースコード

  • 総合演習コードと自動テスト

  • 重要な内容を確認する選択式クイズと解説

前提知識および注意事項

Rustの変数・関数・条件文、構造体・列挙型、所有権と借用の基本概念を理解していることを前提とします。matchで値を区別するコードを読めれば、スムーズに進められます。

例を実行する前に、まず結果を予想してみてください。実行した後は、入力を変えて値がない場合やエラーが発生する場合も確認してみましょう。総合演習では、テストに合格するだけでなく、その戻り値の型とエラー処理の方法を選んだ理由も説明してみることをお勧めします。

こんな方に
おすすめです

学習対象は
誰でしょう?

  • Rustの基本文法は学んだけれど、OptionやResultを扱うたびに行き詰まってしまう方

  • unwrap()や繰り返されるmatchに依存していたコードを改善したい方

  • 「?」をいつ使えるのか、またエラーがどのように伝わるのかを正確に理解したい方

  • 入力値の検証とエラー処理を自分で実装し、テストで確認してみたい方

前提知識、
必要でしょうか?

  • Rustの変数・関数・条件文などの基本文法を理解している必要があります。

  • 所有権と借用、参照の基本概念を理解しているとよいでしょう。

  • 構造体と列挙型を定義し、matchで値を区別するコードを読める必要があります。

  • Cargoで例を実行し、テストする方法を知っていると、実習を進めやすくなります。

こんにちは
hatemogiです。

キャリア認証

2,264

受講生

176

受講レビュー

27

回答

4.7

講座評価

11

講座

関数型プログラミングに関心の高いバックエンド開発者です。カカオの開発チーム長、NHNの主席、LINE+のリードを務め、開発チームのリーディングを行ってきました。また、DnotitiaというAIスタートアップで開発チーム長として働き、Rustでプロジェクトを進めました。

カリキュラム

全体

18件 ∙ (1時間 29分)

講座掲載日: 
最終更新日: 

受講レビュー

まだ十分な評価が集まっていない講座です。
ぜひ最初のレビューをお寄せください。

hatemogiの他の講座

知識共有者の他の講座はこちら

似ている講座

同じ分野の他の講座を見てみましょう!

期間限定セール

¥6,600

40%

¥1,432