enum:いくつかの決まった値の1つを表す型
enum(列挙型)は、「いくつかある選択肢のうち、どれか1つ」を表す型です。
enum Sign {
Positive,
Negative,
Zero,
}
fn main() {
let s = Sign::Positive;
}
matchによる分岐
enumの値を調べるときは、matchを使うのが基本です。matchは、考えられるすべてのパターンを網羅していないとコンパイルエラーになります。
enum Sign {
Positive,
Negative,
Zero,
}
fn classify(n: i32) -> Sign {
if n > 0 {
Sign::Positive
} else if n < 0 {
Sign::Negative
} else {
Sign::Zero
}
}
fn main() {
let n = -5;
let result = classify(n);
match result {
Sign::Positive => println!("Positive"),
Sign::Negative => println!("Negative"),
Sign::Zero => println!("Zero"),
}
}
matchは数値やboolに対しても使えます。
fn main() {
let n = 3;
match n {
1 => println!("1です"),
2 | 3 => println!("2か3です"),
_ => println!("その他です"), // _ はどのパターンにも一致しなかった場合
}
}
Option型:値がないかもしれないことを表す
Rustには他の言語にあるようなnullがありません。代わりに、「値があるかもしれないし、ないかもしれない」ことをOption<T>という型で表現します。
fn find_first_even(numbers: &Vec<i32>) -> Option<i32> {
for &n in numbers {
if n % 2 == 0 {
return Some(n);
}
}
None
}
fn main() {
let numbers = vec![1, 3, 5, 6, 7];
match find_first_even(&numbers) {
Some(value) => println!("最初の偶数: {}", value),
None => println!("偶数が見つかりませんでした"),
}
}
- 値がある場合は
Some(値) - 値がない場合は
None
if letによる簡潔な分岐
Someの場合だけを扱いたいとき、matchの代わりにif letを使うと簡潔に書けます。
fn main() {
let numbers = vec![1, 3, 5, 6, 7];
let found = numbers.iter().find(|&&n| n % 2 == 0);
if let Some(value) = found {
println!("最初の偶数: {}", value);
} else {
println!("偶数が見つかりませんでした");
}
}
演習:数値の符号を判定する
コード提出フォーム
RUST安全なサーバー側採点連携が未接続のため、現在は提出できません。
採点基盤準備中
公開テストケース
読み込み中…