【Rust】第1章第5回:列挙型(Enum)とパターンマッチングの活用方法

本記事では、Rustにおける列挙型(Enum)の基本概念と、パターンマッチングを活用する方法について詳しく解説します。これらの機能を理解することで、より表現力豊かなコードを書くことが可能になります。
0. 記事の概要
この記事を読むメリット
- Rustの列挙型の基本を理解: Enumの定義と用途を学べます。
- パターンマッチングの活用方法を習得: match構文を使った効率的なコードの書き方を学べます。
- エラーハンドリングへの応用: Option型やResult型を用いた安全なプログラミングを学べます。
この記事で学べること
- RustのEnumの基本構文
- match文を使った条件分岐
- Option型とResult型の活用方法
1. RustのEnumとは?

1.1 Enumの基本構文
Rustでは、列挙型(Enum)を使用して複数の状態を持つデータを表現できます。
enum Color {
Red,
Green,
Blue,
}
fn main() {
let color = Color::Red;
}
動作解説
このコードでは、Colorという列挙型を定義し、それを使用して変数color
を宣言しています。
1.2 Enumの値を取得
Enumの値を取得し、それに応じた処理を行うにはmatch文を使用します。
fn print_color(color: Color) {
match color {
Color::Red => println!("赤です"),
Color::Green => println!("緑です"),
Color::Blue => println!("青です"),
}
}
動作解説
match
を使用して、Enumの値に応じた異なる処理を行っています。
2. match構文の活用

2.1 match文の基本
match文は、Enumの値を判別し、適切な処理を実行するための強力なツールです。
2.2 match文の使用例
fn main() {
let number = 3;
match number {
1 => println!("One"),
2 => println!("Two"),
3 => println!("Three"),
_ => println!("Other"),
}
}
動作解説
_
はワイルドカードで、それ以外の値が入力された場合の処理を定義できます。
3. Option型とResult型の活用

3.1 Option型とは?
Rustでは、nullを使わずに値の有無を表すためにOption
型を使用します。
fn find_value(x: i32) -> Option {
if x > 0 {
Some(x * 2)
} else {
None
}
}
動作解説
この関数は、x
が0より大きい場合はSome
を返し、それ以外はNone
を返します。
3.2 Result型とは?
エラーハンドリングにはResult
型を使用します。
fn divide(a: i32, b: i32) -> Result {
if b == 0 {
Err(String::from("ゼロ除算エラー"))
} else {
Ok(a / b)
}
}
動作解説
Result
型を使うことで、成功時はOk
を返し、エラー時はErr
を返します。
4. よくあるエラーと対処法
- 「non-exhaustive patterns」エラー: match文ですべてのパターンを網羅していない場合に発生。ワイルドカード(
_
)を追加する。 - 「mismatched types」エラー: OptionやResultの型を正しく処理していない場合に発生。
unwrap()
やmatch
を使用する。
5. まとめ
本記事では、RustのEnumの基本、match構文の使い方、Option型とResult型の活用方法について解説しました。次回は、Rustの条件分岐(if文とmatch式)について詳しく説明します。