【Rust入門】条件分岐 if を分かりやすく解説

Rust における if
による条件分岐の方法の基本について分かりやすく解説します。
if
による条件分岐
Rust は堅牢な型システムと安全性を重視した言語ですが、他のプログラミング言語にもあるような if
による条件分岐ができます。なお、Rust は多くの他のプログラミング言語と異なり if
は式として値を返すことができる特徴があります。
この記事では、Rust における if
の条件分岐方法について分かりやすく説明します。
if
文の基本構文
Rust の if
文の基本構文は、以下のようになります。
if
の基本構文if 条件1 { // 条件1 が真の時の処理を記載 } else if 条件2 { // 条件2 が真の時の処理を記載 } else { // 条件1, 2 以外の時の処理を記載 }
if
で指定した条件に一致する場合は、続くブロック { }
内の処理が実行されます。また、別の条件を追加していくには else if
で条件を追加していくことが可能です。いずれの条件にも一致しない場合の処理を記載する場合は、最後に else
のブロックで処理を記載します。
以下の簡単な具体例で見てみましょう。
fn main() { let x = 5; // if文の基本的な使い方 if x > 3 { println!("xは3より大きい"); } else if x < 0 { println!("xは0より小さい"); } else { println!("xは0以上、3以下"); } }
【実行結果】 xは3より大きい
let x = 5; の部分の数字を変えつつどの println! が実行されるか確認してみてください。
条件の部分は論理型(true
/false
)である必要があります。0
、空文字、None
等を false として扱うPythonなどとは異なるため注意が必要です。
if は値を返す式として使用できる
Rust での if
は式であることが特徴的です。Rust において式は値を返しますが、文は値を返しません。式として if
を使用することで以下の例のように結果をそのまま変数に束縛することができます。
fn main() { let num = 2; // 偶数/奇数の判定をresultに設定する let result = if num % 2 == 0 { "偶数" } else { "奇数" }; println!("{}は、{}です。", num, result); }
【実行結果】 2は、偶数です。
ここで注意が必要なことは返却する値には「;
」を付けないということです。;
をつけるとその行が文となり、値が返されなくなるため意図した動作にならなくなります。また、各条件の処理ブロックが返す型は同じにしなければなりません。
論理積(AND)/論理和(OR)/否定(NOT)で条件分岐する
条件指定の際には、論理積(AND)、論理和(OR)、否定(NOT)といった論理演算を使って条件を指定することがよくあります。それぞれ見ていきましょう。
論理積(AND)
論理積(AND)を使用する場合には、以下のように &&
で条件をつなぎます。
fn main() { let x = 5; // 論理積 (AND) で条件を指定する if x > 0 && x < 10 { println!("0 < x < 10 です。") } else { println!("x <= 0 または 10 <= x です。") } }
【実行結果】 0 < x < 10 です。
上記例では、x > 0
と x < 10
の両方が真(true
)の場合に「0 < x < 10 です。
」と表示されます。
論理和(OR)
論理和(OR)を使用する場合には、以下のように ||
で条件をつなぎます。
fn main() { let is_member = true; let has_coupon = false; // 論理和 (OR) で条件を指定する if is_member || has_coupon { println!("割引が適用されます。") } else { println!("割引は適用されません。") } }
【実行結果】 割引が適用されます。
上記例では、メンバーである(is_member
)またはクーポンを持っている(has_coupon
)のいずれかの条件が真(true
)の場合に「割引が適用されます。
」と表示されます。
否定(NOT)
否定(NOT)を使用する場合には、以下のように !
を条件の前につけます。
fn main() { let is_logged_in = false; // 否定 (NOT)で条件を指定する if !is_logged_in { println!("ログインしてください。"); } else { println!("ようこそ!"); } }
【実行結果】 ログインしてください。
上記例では、!is_logged_in
は is_logged_in
が false
の時に true
になるため、ログインしていない場合に「ログインしてください。
」と表示されます。
より高度な条件分岐(パターンマッチ)
Rust の強力機能として「パターンマッチ」という機能があります。これは match
という構文を使用して、型と連携して非常に高機能に条件分岐させることが可能です。また、if let
というパターンマッチの簡易版のような構文がありますが、パターンマッチ関連については別途取り上げる際に説明したいと思います。
まとめ
Rust における if
による条件分岐について解説しました。
Rust の if
は、条件に応じた処理の分岐だけではなく、式として値を返すことができるという特徴があります。これにより if
の結果を変数にそのまま代入することもできます。
条件式には、bool
型が必要で 0
や空文字を false
とみなす他言語とは異なるため注意が必要です。また、&&
(AND)、||
(OR)、!
(NOT)といった論理演算子を使えば、複雑な条件も柔軟に記述できます。
さらに高度な分岐には、match
や if let
といった構文も用意されています。まずは if
の基本をしっかり身につけ、Rustらしい書き方に慣れていきましょう。