Progrust Library.

// dictionary

列挙型.

列挙型(enum)は、ある型が取りうる値の種類を「バリアント」として列挙する型です。構造体が複数の値を同時に1つにまとめるのに対し、列挙型は複数の選択肢のうちどれか1つだけを表します。バリアントにはデータを持たせないもの、タプル構造体のように位置でデータを持たせるもの、構造体のように名前付きフィールドでデータを持たせるものの3種類があり1、1つの列挙型の中で混在させられます。

enum Shape {
    Point,                                 // データなし
    Circle(f64),                           // タプル的(半径)
    Rectangle { width: f64, height: f64 }, // 構造体的(幅・高さ)
}

impl Shape {
    fn area(&self) -> f64 {
        match self {
            Shape::Point => 0.0,
            Shape::Circle(radius) => std::f64::consts::PI * radius * radius,
            Shape::Rectangle { width, height } => width * height,
        }
    }
}

fn main() {
    let shapes = vec![
        Shape::Point,
        Shape::Circle(2.0),
        Shape::Rectangle { width: 4.0, height: 5.0 },
    ];
    for shape in &shapes {
        println!("面積: {:.2}", shape.area());
    }
}
Playgroundで開く

メソッドの定義

上記のように、構造体と同じく列挙型にもimplブロックでメソッドを定義できます。バリアントに応じて処理を分岐させるにはmatch式を使うのが基本です。

補足

標準ライブラリのOption・Result

標準ライブラリが提供する列挙型の中でも特に重要なのが、値の有無を表すOption型(Option<T>)と、成功・失敗を表すResult型(Result<T, E>)です。

Footnotes

  1. The Rust Reference: Enumerations — バリアントには値を持たない形・タプル型の値を持つ形・構造体型の値を持つ形の3種類があると定義しています。 ↩

この辞書が使われているページ

backlinks 23

  1. 辞書Copyトレイト
  2. 辞書Debugトレイト
  3. 辞書Defaultトレイト
  4. 辞書derive属性
  5. 辞書if let式
  6. 辞書match式
  7. 辞書Option型
  8. 辞書pub
  9. 辞書Result型
  10. 辞書unwrap
  11. 辞書use宣言
  12. 辞書ジェネリクス
  13. 辞書トレイト境界
  14. 辞書マクロ
  15. 辞書モジュール
  16. 辞書ライフタイム注釈
  17. 辞書比較のトレイト
  18. 辞書比較演算子
  19. 本動かして学ぶRustプログラミング問題集 › 第11章 列挙型とmatch式
  20. 本動かして学ぶRustプログラミング問題集 › 第12章 OptionとResult
  21. 本動かして学ぶRustプログラミング問題集 › 第13章 モジュールと公開範囲
  22. 本動かして学ぶRustプログラミング問題集 › 第17章 ジェネリクス
  23. 本動かして学ぶRustプログラミング問題集 › 第20章 トレイト境界とimpl Trait