Optionとは?
CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 35/66。
プログラミングでは、値が存在する場合もしない場合もあるという状況に頻繁に遭遇します。例えば、リスト内の項目を検索すると、その項目が見つかることもあれば、全く存在しないこともあります。従来のプログラミング言語では、「何もない」ことを表すために null や -1 といった特別な値がよく使われますが、このアプローチはバグやクラッシュの原因になることがあります。
Rustは、Option<T>列挙型(enum)を用いて異なるアプローチを取ります。これは、値の不在の可能性を明示的に表現する組み込み型です。値が存在するかどうかを推測するのではなく、Rustは両方のケースを事前に処理することを強制します。
Option enumには、ちょうど2つのバリアントがあります:
Some(value) // 値が含まれている
None // 値が含まれていない関数が値を返さない可能性がある場合、Optionを返します。返すべき値がある場合は、それをSomeでラップします。値がない場合は、Noneを返します。
これにより、値が存在しない可能性が型システムにおいて明示的になり、存在しない値を誤って使用することを防ぎます。
すでにハッシュマップの .get() メソッドで Option が使われているのを見たことがあるでしょう。キーが存在する場合は Some(&value) を、存在しない場合は None を返します。このパターンはRustの至る所に登場し、コードをより安全で予測可能なものにします。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
チートシート
Option<T> 列挙型は、値が存在するかしないかを表し、存在しない値を使用することによるバグを防ぎます。
これには2つのバリアントがあります。
Some(value) // 値が含まれている
None // 値が含まれていない値を返さない可能性がある関数は Option を使用します。例えば、ハッシュマップの .get() メソッドは、キーが存在する場合は Some(&value) を返し、存在しない場合は None を返します。
自分で試してみよう
このレッスンにはコードチャレンジは含まれていません。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。