#5 Rustで学ぶ条件分岐の基本
Rustの条件分岐は、見た目こそ他の言語と似ていますが、「if自体が値を返せる」という独自の特徴を持っています。この記事では、Rustにおける条件分岐の基本と、強力なmatchを解説します。
if文の基本
let age = 20;
if age >= 18 {
println!("成人です");
} else {
println!("未成年です");
}
他の言語と違い、条件を囲むかっこ()が不要です。
ifが値を返せるという特徴
Rustのifは、条件によって処理を分けるだけでなく、その結果を変数に代入することもできます。
let message = if age >= 18 { "成人です" } else { "未成年です" };
他の多くの言語では、この処理を書くために三項演算子のような別の書き方が必要ですが、Rustではifをそのまま使えます。
matchによるパターンマッチング
複数の値によって処理を分けたい場合は、matchを使うとif文を並べるより読みやすくなります。
let day = "月";
match day {
"土" | "日" => println!("休日です"),
_ => println!("平日です"),
}
matchもifと同じく値を返せるため、変数への代入にも使えます。
let result = match score {
90..=100 => "優",
70..=89 => "良",
_ => "可",
};
Rustのmatchは、指定できるパターンをすべて網羅していないとコンパイルエラーになるため、条件の考慮漏れをコンパイラが検出してくれます。
条件の型は必ず真偽値
Rustでは、if文の条件は必ず真偽値(bool型)でなければなりません。JavaScriptのように、数値の0や空文字を条件として扱うことはできず、if ageのような書き方はエラーになります。必ずif age > 0のように、明確な比較の形で書く必要があります。
if letで簡潔にパターンを確認する
特定のパターンにだけ興味があり、それ以外は無視したい場合、if letという書き方を使うとmatchより簡潔に書けます。
let value: Option = Some(5);
if let Some(n) = value {
println!("値は{}です", n);
}
matchでNoneの場合の処理が不要なとき、if letのほうがコードがすっきりします。
Rustならではの注意点
ifを値として使う場合、ifブロックとelseブロックの両方が、同じ型の値を返すようにする必要があります。片方が文字列、もう片方が数値、といった組み合わせはエラーになるため注意しましょう。
まとめ
Rustの条件分岐は基本的な書き方に加え、「値を返せるif」や、網羅性をチェックしてくれるmatchという独自の特徴を持っています。条件が必ず真偽値である必要がある点も、あわせて覚えておきましょう。
本ページはプロモーションを含みます。
参考書籍(PR)
Rustをもっと学びたい方には「実践Rust入門[言語仕様から開発手法まで]」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿