今年の言語は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`
理解した!
次回!
イエス!