最初のenumを定義する
シンプルな列挙型を作成します。
「最初のenumを定義する」はCoddyKit上の無料Learn Rust Codingレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn Rust Coding学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn Rust Codingコースには全4レッスンが含まれています。
What Is an Enum?
enum(列挙型)を使用すると、バリアントと呼ばれる可能な値を列挙して型を定義できます。その型の値は、それらのバリアントのうちのいずれか1つのみをとることができます。
enumは、方角やトランプのマークのように、状態が固定されている場合に非常に有効です。
enum Direction {
North,
South,
East,
West,
}enumの宣言
enumキーワード、名前、そして波かっこの中にカンマ区切りのバリアント一覧を記述して、enumを宣言します。
慣例として、enum名にはPascalCase(Directionなど)を使い、バリアント名にも同じ形式(Northなど)を使います。
enum TrafficLight {
Red,
Yellow,
Green,
}enum値の作成
値を作成するには、enum名、2つのコロン::、バリアントの順に記述します。
たとえば、Direction::NorthはDirection型の値を作成します。::は、そのバリアントがどのenumに属するかをRustに示します。
enum Direction {
North,
South,
East,
West,
}
fn main() {
let heading = Direction::East;
println!("Created a direction value!");
}enumは型です
一度定義すると、enumはi32やboolと同じ実際の型になります。その値を変数に格納したり、関数に渡したりできます。
Directionを受け取る関数は、そのどのバリアントでも受け取れますが、それ以外は受け取りません。
enum Direction {
North,
South,
}
fn describe(d: Direction) {
println!("Got a direction");
}
fn main() {
describe(Direction::North);
}数値だけではいけない理由
信号機を0、1、2で表すこともできますが、誤って7を使うことを防げません。
enumを使うと無効な状態を不可能にできます。コンパイラーが、値は必ず一覧にあるバリアントのいずれかであることを保証するためです。これにより、安全性が高まり、コードもはるかに読みやすくなります。
Debugを導出して表示する
デフォルトでは、Rustはenumの表示方法を知りません。enumの上に#[derive(Debug)]を追加すると、{:?}フォーマッターで表示できるようになります。
学習中の簡単なデバッグに便利です。
#[derive(Debug)]
enum Direction {
North,
South,
}
fn main() {
let d = Direction::South;
println!("{:?}", d);
}enum値の比較
#[derive(PartialEq)]を追加すると、==でバリアントを比較できます。
単純なチェックには便利ですが、より複雑な処理には、通常はmatch式(まもなく学びます)のほうが適しています。
#[derive(PartialEq)]
enum Light {
Red,
Green,
}
fn main() {
let l = Light::Red;
if l == Light::Red {
println!("Stop!");
}
}いくつでもバリアントを定義できる
enumには必要な数だけバリアントを定義できます。すべて同じ型の一部です。
関連する状態をまとめて記述すると、コードが整理され、取り得る選択肢がひと目で分かります。
enum Suit {
Hearts,
Diamonds,
Clubs,
Spades,
}標準ライブラリのenum
Rust自身の標準ライブラリでは、いたるところでenumが使われています。有名なものに、値が存在する場合としない場合を表すOptionと、成功またはエラーを表すResultがあります。
ここでenumを学ぶと、後でこれらの基本型を理解する準備になります。
// Option is an enum in std:
// enum Option<T> {
// Some(T),
// None,
// }単純なenumのコピー
バリアントがデータを持たないenumでは、CloneとCopyを導出できます。すると、値はムーブされず自動的にコピーされます。
これにより、小さな状態enumが整数のような単純な値として振る舞います。
#[derive(Clone, Copy)]
enum Coin {
Heads,
Tails,
}
fn main() {
let a = Coin::Heads;
let b = a; // a is still usable
}まとめて実装する
完全なプログラムを見てみましょう。enumを定義し、値を作成して、Debugを使って表示します。
実行して、Greenを別のバリアントに変更し、出力が変わることを確認してみましょう。
#[derive(Debug)]
enum TrafficLight {
Red,
Yellow,
Green,
}
fn main() {
let current = TrafficLight::Green;
println!("Light is {:?}", current);
}簡単な確認
enumの基本について理解度を確認しましょう。
まとめ
enumは、enumキーワードで宣言した、バリアントの固定された一覧から型を定義するものだと学びました。
EnumName::Variantで値を作成し、Debug、PartialEq、Copyを導出して、表示、比較、コピーができます。次はmatchを使って各バリアントに応じた処理を学びます。
よくある質問
「最初のenumを定義する」レッスンは無料ですか?
はい。「最初のenumを定義する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn Rust Codingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn Rust Codingコースには全4レッスンが含まれています。
「最初のenumを定義する」で何を学びますか?
シンプルな列挙型を作成します。 ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn Rust Codingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn Rust Codingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「最初のenumを定義する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn Rust Codingレッスンでコードを書いて実行できますか?
はい。すべてのLearn Rust Codingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 最初のenumを定義する
- enumのバリアントをmatchする
- データを持つenum
- matchガードとバインディング