カテゴリ: Rust 更新日: 2026/03/23

Rustのmatch式とは何か?強力なパターンマッチによる分岐処理を初心者向けに徹底解説

Rustのmatch式とは何か?強力なパターンマッチによる分岐処理を解説
Rustのmatch式とは何か?強力なパターンマッチによる分岐処理を解説

先生と生徒の会話形式で理解しよう

生徒

「Rustを勉強していると、if文とは別にmatch式という書き方が出てきますが、これは何をするものなんですか?」

先生

「match式は、値の形やパターンごとに処理を分けるための仕組みです。Rustではとても重要で、安全で読みやすい分岐処理を書けます。」

生徒

「if文と何が違うんでしょうか?どちらを使えばいいのか迷います。」

先生

「match式は、すべてのケースを網羅することが求められる点が大きな特徴です。だからバグを未然に防ぎやすいのです。基本から順番に見ていきましょう。」

1. Rustのmatch式の基本的な役割

1. Rustのmatch式の基本的な役割
1. Rustのmatch式の基本的な役割

Rustのmatch式は、値に応じて処理を分岐させるための構文です。C言語やJavaのswitch文に似ていますが、Rustでは単なる条件分岐ではなく、パターンマッチという考え方を採用しています。数値や文字列だけでなく、列挙型や構造の形まで判定できるため、非常に表現力が高いのが特徴です。

また、match式は「式」であるため、値を返すことができます。これはRustの基本構文やプログラムの流れを理解するうえで重要なポイントです。分岐した結果をそのまま変数に代入できるため、コードが簡潔になります。

2. 最もシンプルなmatch式の例

2. 最もシンプルなmatch式の例
2. 最もシンプルなmatch式の例

まずは整数値を使った、最も基本的なmatch式を見てみましょう。初心者の方でも直感的に理解しやすい例です。


fn main() {
    let number = 2;

    match number {
        1 => println!("1です"),
        2 => println!("2です"),
        3 => println!("3です"),
        _ => println!("それ以外の数です"),
    }
}

この例では、numberの値に応じて処理が分岐しています。最後のアンダースコアは「それ以外すべて」を意味するパターンです。Rustでは、すべてのケースを網羅しないとコンパイルエラーになるため、このような書き方がよく使われます。

3. match式が安全と言われる理由

3. match式が安全と言われる理由
3. match式が安全と言われる理由

Rustのmatch式が評価されている理由の一つは、網羅性チェックです。すべての可能性を考慮していない場合、コンパイル時にエラーとして検出されます。これは実行時エラーを減らすうえで非常に重要です。

例えば、条件を書き忘れてしまうと、他の言語では実行時まで気づけないことがあります。しかしRustでは、match式が安全網の役割を果たします。これがRustのメモリ安全や信頼性の高さにつながっています。

4. 列挙型とmatch式の組み合わせ

4. 列挙型とmatch式の組み合わせ
4. 列挙型とmatch式の組み合わせ

Rustでは、列挙型とmatch式を組み合わせることで、非常に読みやすく安全なコードを書けます。列挙型は状態や種類を表すのに向いており、match式との相性が抜群です。


enum Direction {
    Up,
    Down,
    Left,
    Right,
}

fn main() {
    let dir = Direction::Left;

    match dir {
        Direction::Up => println!("上に進む"),
        Direction::Down => println!("下に進む"),
        Direction::Left => println!("左に進む"),
        Direction::Right => println!("右に進む"),
    }
}

このように、列挙型の各パターンに対して処理を書くことで、状態ごとの動作が明確になります。後から状態が追加された場合も、match式がエラーで知らせてくれるため、修正漏れを防げます。

5. 値を返すmatch式の使い方

5. 値を返すmatch式の使い方
5. 値を返すmatch式の使い方

match式は値を返せるため、条件によって結果を変えたい場面で非常に便利です。if文よりも意図が明確になることが多く、Rustらしい書き方と言えます。


fn main() {
    let score = 85;

    let grade = match score {
        90..=100 => "A",
        80..=89 => "B",
        70..=79 => "C",
        _ => "D",
    };

    println!("評価は{}です", grade);
}

この例では、点数に応じて評価を文字列として返しています。範囲指定もできるため、条件分岐が多い場合でも読みやすく整理できます。

6. if文とmatch式の使い分け

6. if文とmatch式の使い分け
6. if文とmatch式の使い分け

初心者の方がよく悩むのが、if文とmatch式のどちらを使うべきかという点です。単純な真偽値の分岐や、条件が少ない場合はif文が向いています。一方、値の種類が明確で、すべてのケースを扱いたい場合はmatch式が適しています。

Rustでは、match式を使うことで意図がはっきりし、将来的な変更にも強いコードになります。特に列挙型を扱う場面では、match式を積極的に使うとよいでしょう。

7. 初心者がつまずきやすいポイント

7. 初心者がつまずきやすいポイント
7. 初心者がつまずきやすいポイント

match式を初めて使うとき、「なぜコンパイルエラーになるのか分からない」と感じることがあります。その多くは、パターンの書き忘れや型の不一致が原因です。Rustは厳密な言語ですが、その分エラーメッセージも丁寧です。

エラーメッセージをよく読み、どのパターンが不足しているのかを確認する習慣をつけることで、match式の理解が一気に深まります。

8. Rustのmatch式がプログラムの流れを分かりやすくする理由

8. Rustのmatch式がプログラムの流れを分かりやすくする理由
8. Rustのmatch式がプログラムの流れを分かりやすくする理由

Rustのmatch式は、プログラムの流れを視覚的に整理してくれます。どの値が来たときに、どの処理が実行されるのかが一目で分かるため、可読性が高くなります。

初心者のうちからmatch式に慣れておくと、Rustらしい書き方が自然と身につきます。安全性、読みやすさ、保守性のすべてを意識した分岐処理として、match式は欠かせない存在です。

関連記事:
カテゴリの一覧へ
新着記事
New1
C++
C++の関数の作り方を完全ガイド!初心者でもわかる基本構文と定義方法
New2
Rust
Rustのビット演算子とビット操作を徹底解説!低レイヤ開発への第一歩
New3
C言語
C言語の配列名はポインタ?暗黙の変換を初心者向けにわかりやすく解説
New4
C++
C++が今でも現役で使われる理由を徹底解説!長年愛されるプログラミング言語の魅力
人気記事
No.1
Java&Spring記事人気No1
C言語
C言語を学ぶ初心者におすすめの環境構築手順【2025年版】
No.2
Java&Spring記事人気No2
C言語
C言語のソースコードとヘッダファイルの役割とは?初心者向けにわかりやすく解説!
No.3
Java&Spring記事人気No3
C++
MinGWとMSYS2でWindowsにC++環境を構築する方法を徹底解説!初心者でもできるセットアップガイド
No.4
Java&Spring記事人気No4
C言語
Visual Studio CodeでC言語を実行する方法【拡張機能の設定と実行手順】
No.5
Java&Spring記事人気No5
C言語
LinuxでC言語開発環境を構築する方法【GCCとMakefileの基本】
No.6
Java&Spring記事人気No6
C言語
C言語開発でよく使われるエディタとIDEランキング【初心者向け完全ガイド】
No.7
Java&Spring記事人気No7
C++
CMakeの基本構文とCMakeLists.txtを初心者向けに解説
No.8
Java&Spring記事人気No8
C言語
C言語をオンラインで実行できる便利なコンパイラサービスまとめ【初心者向け】