【Rust】Rust ~ Option型 ~

◾️はじめに

https://dk521123.hatenablog.com/entry/2025/11/30/222255

で「Rustには class がない」っていう話をしたが、
今回は、「Rustには null がない」って話。

目次

【0】Rustには null がない
【1】Option型
【2】関連メソッド
 1)unwrap()
 2)unwrap_or()
 3)is_some() / is_none()
【3】その他Tips
 1)match式
 2)? 演算子 (Try Operator)

【0】Rustには null がない

* Rust には、Javaなどの null がない
 => 代わりに、Option型(Some/None)で実装する

https://qiita.com/CRUD5th/items/acd7f632e5cccc1069c1

【1】Option型

* Scala の Option型とほぼ同じ
 => 値があるかないかを表す型で
 「Some」と「None」の2種類のサブクラスを持っている

cf. None(代名詞) = 1つも〜ない

Scala ~ 基本編 / Option型 ~
https://dk521123.hatenablog.com/entry/2023/03/09/000000

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

【2】関連メソッド

1)unwrap()

fn main() {
    let value1: Option<i32> = Some(3);
    // Result: 3
    println!("Result: {}", value1.unwrap());

    let value2: Option<i32> = None;
    // thread 'main' (3920593) panicked at src/main.rs
    println!("Result: {}", value2.unwrap());
}

2)unwrap_or()

fn main() {
    let value1: Option<i32> = Some(3);
    // Result: 3
    println!("Result: {}", value1.unwrap_or(-1));

    let value2: Option<i32> = None;
    // Result: -1
    println!("Result: {}", value2.unwrap_or(-1));
}

3)is_some() / is_none()

fn main() {
    let value1: Option<i32> = Some(3);
    // Result: true
    println!("Result: {}", value1.is_some());

    let value2: Option<i32> = None;
    // Result: true
    println!("Result: {}", value2.is_none());
}

【3】その他Tips

1)match式

fn main() {
    let value1: Option<i32> = Some(3);
    match value1 {
        // some value = 3
        Some(v) => println!("some value = {}", v),
        None => println!("none value"),
    };
    let result1 = match value1 {
        Some(v) => format!("There is a value ({})", v),
        None => "There is no value".into(),
    };
    // Result: There is a value
    println!("Result: {}", result1);

    let value2: Option<i32> = None;
    match value2 {
        Some(v) => println!("some value = {}", v),
        // none value
        None => println!("none value"),
    };
}

2)? 演算子 (Try Operator)

* 以下の関連記事を参照のこと

Rust ~ Error handling(Result型 / ?演算子) ~
https://dk521123.hatenablog.com/entry/2025/12/02/000346

参考文献

https://zenn.dev/mebiusbox/books/22d4c1ed9b0003/viewer/0d7a68
https://qiita.com/take4s5i/items/c890fa66db3f71f41ce7

関連記事

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/2025/12/05/000647
Rust ~ 保有権 ~
https://dk521123.hatenablog.com/entry/2023/05/04/213726
Rust ~ enum / 列挙型 ~
https://dk521123.hatenablog.com/entry/2025/12/03/000831
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 ~ 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