【Rust】Rust ~ enum / 列挙型 ~

◾️はじめに

Rust を勉強していて、例えば、Option型では、
以下の関連記事の通り、enum で定義されていた。
どうも、Rustは、CやJavaなどの他のプログラムと比べても
enum が異なりそうなので、調べてみた

Rust ~ Option型 ~
https://dk521123.hatenablog.com/entry/2025/12/01/223443

// enumなんだ、、、ここは、Scalaと違う、、、
enum Option<T> {
    Some(T),
    None,
}

目次

【1】enum
 1)基本的な定義方法
 2)Enumの値の設定
【2】Rustのenumの特徴
 1)enum値ごとに異なる値が設定できる
【3】その他Tips
 1)match式

【1】enum

* 列挙型
 => Rust 特有の特徴については、後述「【2】Rustのenumの特徴」を参照

https://doc.rust-jp.rs/book-ja/ch06-01-defining-an-enum.html

1)基本的な定義方法

enum IpAddrKind {
    V4,
    V6,
}

2)Enumの値の設定

// [列挙型]::[Enum値]
let four = IpAddrKind::V4;
let six = IpAddrKind::V6;

【2】Rustのenumの特徴

* Rustのenumは、以下の例のように値が設定できる。
 ここは、Javaなど他のプログラムでも設定できるが
 以降の章では、Rust特有なenumの使い方を扱う

enum IpAddr {
    V4(String),
    V6(String),
}

let home = IpAddr::V4(String::from("127.0.0.1"));
let loopback = IpAddr::V6(String::from("::1"));

1)enum値ごとに異なる値が設定できる

* これは、Rust特有な気がする、、、

例1

// enum
enum IpAddr {
    V4(u8, u8, u8, u8),
    V6(String),
}

let home = IpAddr::V4(127, 0, 0, 1);
let loopback = IpAddr::V6(String::from("::1"));

例2

enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}

【3】その他Tips

1)match式

* match式 とも相性がいい、、、

サンプル

enum IpAddr {
    V4(u8, u8, u8, u8),
    V6(String),
}
fn main() {
    let home = IpAddr::V4(127, 0, 0, 1);
    match home {
         // IPv4: 127.0.0.1
        IpAddr::V4(a, b, c, d) => println!("IPv4: {}.{}.{}.{}", a, b, c, d),
        IpAddr::V6(ref addr) => println!("IPv6: {}", addr),
    }
    let loopback = IpAddr::V6(String::from("::1"));
    match loopback {
        IpAddr::V4(a, b, c, d) => println!("IPv4: {}.{}.{}.{}", a, b, c, d),
         // IPv6: ::1
        IpAddr::V6(ref addr) => println!("IPv6: {}", addr),
    }
}

関連記事

Rust ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/22/234808
Rust ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2025/11/26/224648
Rust ~ 保有権 ~
https://dk521123.hatenablog.com/entry/2023/05/04/213726
Rust ~ mod ~
https://dk521123.hatenablog.com/entry/2025/11/29/221911
Rust ~ struct/impl/trait ~
https://dk521123.hatenablog.com/entry/2025/11/30/222255
Rust ~ Option型 ~
https://dk521123.hatenablog.com/entry/2025/12/01/223443
Rust ~ Error handling(Result型 / ?演算子) ~
https://dk521123.hatenablog.com/entry/2025/12/02/000346
Rust ~ Axum / 入門編 ~
https://dk521123.hatenablog.com/entry/2023/09/02/224707
Rust ~ Axum / REST ~
https://dk521123.hatenablog.com/entry/2025/11/27/145159