Rust入門

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

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

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! が実行されるか確認してみてください。

条件の部分は論理型(truefalse)である必要があります。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 > 0x < 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_inis_logged_infalse の時に true になるため、ログインしていない場合に「ログインしてください。」と表示されます。

より高度な条件分岐(パターンマッチ)

Rust の強力機能として「パターンマッチ」という機能があります。これは match という構文を使用して、型と連携して非常に高機能に条件分岐させることが可能です。また、if let というパターンマッチの簡易版のような構文がありますが、パターンマッチ関連については別途取り上げる際に説明したいと思います。

まとめ

Rust における if による条件分岐について解説しました。

Rust の if は、条件に応じた処理の分岐だけではなく、式として値を返すことができるという特徴があります。これにより if の結果を変数にそのまま代入することもできます。

条件式には、bool 型が必要で 0 や空文字を false とみなす他言語とは異なるため注意が必要です。また、&&(AND)、||(OR)、!(NOT)といった論理演算子を使えば、複雑な条件も柔軟に記述できます。

さらに高度な分岐には、matchif let といった構文も用意されています。まずは if の基本をしっかり身につけ、Rustらしい書き方に慣れていきましょう。

ABOUT ME
ホッシー
ホッシー
システムエンジニア
はじめまして。当サイトをご覧いただきありがとうございます。
私は製造業のメーカーで、DX推進や業務システムの設計・開発・導入を担当しているシステムエンジニアです。これまでに転職も経験しており、以前は大手電機メーカーでシステム開発に携わっていました。

これまでの業務を通じてさまざまなプログラミング言語や技術に触れてきましたが、その中でもRustの設計思想に惹かれ、この言語についてもっと深く学びたい、そしてその魅力を発信していきたいと思い、このサイトを立ち上げました。

自身の学びを整理しつつ、同じようにRustに興味を持つ方のお役に立てるような情報を発信していければと思っています。どうぞよろしくお願いいたします。

※キャラクターデザイン:ゼイルン様
記事URLをコピーしました