今年の言語はRust その9

Rustを学びます

Rustの日本語ドキュメント 2nd Edition
https://doc.rust-jp.rs/book/second-edition/

オリジナル(英語)
https://doc.rust-lang.org/book/

6. Enumとパターンマッチング

6.1 Enumを定義


enum IpAddrKind{
    V4,
    V6,
}


struct IpAddr{
    kind: IpAddrKind,
    address: String,
}


fn main(){

    let home = IpAddr{
      kind: IpAddrKind::V4,
      address: String::from("192.168.0.1"),
    };

    let loopback = IpAddr{
      kind: IpAddrKind::V6,
      address: String::from("::1"),
    };
}



異なる列挙子を含むenumを作れる


enum Message{
    Quit,
    Move { x: i32, y: i32},
    Write(String),
    ChangeColor(i32, i32, i32),
}
struct QuiteMessage; // ユニット構造体
struct MoveMessage{x: i32, y: i32}
struct WriteMessage(String); // タプル構造体
struct ChangeColorMessage(i32, i32, i32) // タプル構造体

c言語とあまり変わらない使い方。

enumもメソッドを含めれる

#[derive(Debug)]

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


impl Message{

    fn call(&self){

    }
}


fn main(){

    // enum型
    let m = Message::Write(String::from("hello"));

    m.call();

}

Rustにはnullを許容できる型とそうでない型がある。

もし、nullが入る可能性のある変数にはOptionを利用するひつようがある。

不正確にnullでない値を想定する心配をしなくてもよいということは、コード内でより自信を持てることになります。 nullになる可能性のある値を保持するには、その値の型をOptionにすることで明示的に同意しなければなりません。 それからその値を使用する際には、値がnullである場合を明示的に処理する必要があります。 値がOption以外の型であるとこ全てにおいて、値がnullでないと安全に想定することができます。 これは、Rustにとって、意図的な設計上の決定であり、nullの普遍性を制限し、Rustコードの安全性を向上させます。

つまり通常の型はnullは許容されない。


enum Option<T>{
    Some(T),
    None,
}

fn main(){

    let x: i8 = 5;
    let y: Option<i8> = Some(5);

    let sum = x + y;

}

error[E0277]: cannot add `std::option::Option<i8>` to `i8`
 --> src/main.rs:8:17
  |
8 |     let sum = x + y;
  |                 ^ no implementation for `i8 + std::option::Option<i8>`
  |
  = help: the trait `std::ops::Add<std::option::Option<i8>>` is not implemented for `i8`

理解した!

次回!

イエス!

bannerAds