カスタム型のための列挙型
複数のバリアントのいずれかになり、関連データを持つこともできる型を、列挙型で定義する方法を学びます。
「カスタム型のための列挙型」はCoddyKit上の無料Learn Rust Codingレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn Rust Coding学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn Rust Codingコースには全3レッスンが含まれています。
列挙型:カスタム型の選択肢
カスタム型のための列挙型へようこそ。Rustの列挙型(enumeration)は、複数の異なる選択肢のいずれかになれる型を定義する仕組みです。
列挙型は、「この項目はA、またはB、またはCになれる」と表現する方法だと考えてください。さまざまな状態や選択肢を表すのに非常に便利です。
単純な列挙型の定義
列挙型を定義するには、enum キーワードに続けて名前を記述し、波かっこの中にバリアントを列挙します。それぞれのバリアントが異なる選択肢を表します。
方角を表す簡単な例を見てみましょう。
enum Direction {
North,
South,
East,
West,
}
fn main() {
let my_direction = Direction::North;
println!("My direction is {:?}", my_direction);
}関連データを持つ列挙型
単純なバリアントとは異なり、列挙型のバリアントはデータを保持することもできます。これにより列挙型は非常に強力になり、それぞれのバリアントに固有の情報を持たせられます。
データには、タプル((i32, String) など)や構造体({ x: i32, y: i32 } など)を指定できます。
関連データの実例
それぞれのバリアントが異なる種類のメッセージを表し、一部がデータを持ち、一部が持たない列挙型を見てみましょう。
Move は構造体、Write はString、ChangeColor はタプルを使用している点に注目してください。
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
fn main() {
let m1 = Message::Quit;
let m2 = Message::Move { x: 10, y: 20 };
let m3 = Message::Write(String::from("hello"));
let m4 = Message::ChangeColor(255, 0, 128);
// We can't directly print enums with associated data using {:?}
// without deriving Debug, which we'll cover later.
// For now, just know these instances are created.
println!("Messages created!");
}「`Option`」列挙型:値がない場合の処理
Rustの最も基本的な列挙型の1つが Option<T> です。値が存在する場合と存在しない場合を表すために使用し、他の言語でよくあるnullポインタエラーを防ぎます。
Some(T):T型の値を保持するバリアントです。None:値がないことを表すバリアントです。
「`Option<T>`」を効果的に使う
Option<T> を使うと、Some と None の両方のケースを明示的に処理する必要があるため、コードの安全性と堅牢性が高まります。予期しない null によるクラッシュとも無縁です。
使用例を見てみましょう。
fn find_item(id: i32) -> Option<String> {
if id == 7 {
Some(String::from("Found item 7!"))
} else {
None
}
}
fn main() {
let item1 = find_item(7);
let item2 = find_item(5);
println!("Item 1: {:?}", item1);
println!("Item 2: {:?}", item2);
}簡単に学ぶ:「`Result`」列挙型
もう1つ重要な列挙型に、エラー処理に使われる Result<T, E> があります。これは2つのバリアントを持ちます。
Ok(T):成功を表し、成功した値を含みます。Err(E):失敗を表し、エラー値を含みます。
Result については後のレッスンで詳しく説明しますが、これも強力な列挙型パターンの1つであることを覚えておくとよいでしょう。
列挙型のメソッド
構造体と同じように、impl ブロックを使って列挙型にメソッドを定義できます。これらのメソッドでは、列挙型のバリアントに応じて処理を実行したり、値を返したりできます。
先ほどの Message 列挙型に call メソッドを追加してみましょう。
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
impl Message {
fn call(&self) {
println!("A message was called!");
}
}
fn main() {
let m = Message::Write(String::from("hello"));
m.call();
}列挙型クイックチェック
Rustの列挙型について、次のうち正しい記述はどれでしょうか。
振り返り:カスタム型としての列挙型
よくできました。Rustの列挙型を使うと、複数のバリアントのいずれかになり得るカスタム型を強力に定義できることを学びました。
- 列挙型を使うと、選択肢や状態を明確にモデル化できます。
- バリアントには関連データを持たせられるため、高い柔軟性があります。
Option<T>列挙型は、値がない状態を安全に扱うための重要な仕組みです。- 列挙型には
implブロックでメソッドを定義できます。
次は、強力なパターンマッチングを使って、これらの列挙型のバリアントを扱う方法を見ていきましょう。
よくある質問
「カスタム型のための列挙型」レッスンは無料ですか?
はい。「カスタム型のための列挙型」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn Rust Codingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn Rust Codingコースには全3レッスンが含まれています。
「カスタム型のための列挙型」で何を学びますか?
複数のバリアントのいずれかになり、関連データを持つこともできる型を、列挙型で定義する方法を学びます。 ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn Rust Codingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn Rust Codingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/3です。
「カスタム型のための列挙型」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn Rust Codingレッスンでコードを書いて実行できますか?
はい。すべてのLearn Rust Codingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 構造体の定義と利用
- カスタム型のための列挙型
- 強力なパターンマッチング