is_some() と is_none()
CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 37/66。
時には、実際にその値を取り出すことなく、Optionに値が含まれているかどうかを確認する必要がある場合があります。Rustはこのために2つの便利なメソッドを提供しています:.is_some()と.is_none()。
両方のメソッドはboolean値を返すため、if条件での使用に最適です。
let maybe_score = Some(85);
if maybe_score.is_some() {
println!("We have a score!");
}
if maybe_score.is_none() {
println!("No score available");
}.is_some()メソッドは、OptionがSome値を含んでいる場合にtrueを返し、Noneの場合はfalseを返します。.is_none()メソッドはその逆で、Noneに対してはtrueを、Someに対してはfalseを返します。
チャレンジ
簡単入力として数値を受け取ります。数値が正の場合は Some(number) を含み、数値がゼロまたは負の場合は None となる Option<i32> を作成してください。.is_some() と .is_none() を使用して Option をチェックし、適切なメッセージを出力してください。
要件:
- 入力を読み取り、
i32に変換します Option<i32>変数を作成します:- 数値が正(0より大きい)の場合、
Some(number)を割り当てます - 数値がゼロまたは負の場合、
Noneを割り当てます
- 数値が正(0より大きい)の場合、
.is_some()を使用して、Optionに値が含まれているかチェックします.is_some()がtrueを返す場合、Positive number detectedと出力します.is_none()を使用して、Optionが空であるかチェックします.is_none()がtrueを返す場合、No positive numberと出力します
入力:
- 単一の整数 (例:
42,0, または-5)
出力:
- 数値が正の場合:
Positive number detected - 数値がゼロまたは負の場合:
No positive number
チートシート
Optionが値を含んでいるかを確認するには、.is_some()を使用します:
let maybe_score = Some(85);
if maybe_score.is_some() {
println!("We have a score!");
}Optionが空であるかを確認するには、.is_none()を使用します:
if maybe_score.is_none() {
println!("No score available");
}どちらのメソッドも、論理値(trueまたはfalse)を返します。
自分で試してみよう
use std::io;
fn main() {
// 入力を読み込む
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let number: i32 = input.trim().parse().expect("Invalid input");
// TODO: 以下にコードを記述してください
// 数値が正かどうかに基づいて Option<i32> を作成します
// Option が Some かどうかを確認し、適切なメッセージを表示します
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Logic & Flowのすべてのレッスン
6Optionによる値の欠如の扱い
Optionとは?Optionでmatchを使うis_some() と is_none()Optionのアンラップexpect メソッドデフォルト値の提供:unwrap_orまとめ:要素の検索