概要
- 実践Rustプログラミング入門を買いました
- 読み進めた時に書いたコードやメモを書き残していきます
1日目のお勉強
- 変数と定数
- trait
- enum
- if-match
変数と定数
- 基本的には定数
- 変数にしたい場合
mut
を変数宣言に付けないといけない
let fixed_number = 1;
let mut mutable_number = 2;
trait
- Javaで言うところの interface と実装クラスを実現するためのものらしい
- trait で 関数定義をして, struct に実装していく
trait MyInterface {
fn myFunction() -> i64;
}
struct MyStruct;
impl MyInterface for MyStruct {
fn myFunction(&self) -> i64 {
100
}
}
- enum で定義したものに関しては match 文で全パターン網羅した if-else 構文的なものが作れる
- まだ使ってないからわからんが Option, Result は enumで定義されたものらしい
- Result型に
unwrap_or(x)
を使うとOkだった場合はそのまま展開, Errだった場合には x が応答される
enum MyEnum {
Status1,
Status2(i32),
Status3(String),
}
fn main() {
let test = MyEnum::Status2(100);
match test {
MyEnum::Status1 => println!("This is Status1."),
MyEnum::Status2(x) => println!("This is Status2. get Number {}.", x),
MyEnum::Status3(x) => println!("This is Status3. get String {}.", x),
}
}
This is Status2. get Number 100.
Result
fn main() {
let result: Result<String, String> = Ok("ok".to_string());
println!("I get {}", result.unwrap_or("ng".to_string()));
let result: Result<String, String> = Err("error".to_string());
println!("I get {}", result.unwrap_or("ng".to_string()));
}
I get ok
I get ng // I get error ではなく I get ng になっている
if-match
- 条件分岐
- if 文や match 文を直接変数に突っ込んで応答値を返せるっぽい
fn main() {
let result = 200;
let return_val: Result<i32, String> = if result == 200 {
Ok(200)
} else {
Err(format!("error code is {}.", result))
};
match return_val {
Ok(x) => println!("{} ok.", x),
Err(x) => println!("{}", x),
}
let error_result: Result<i32, String> = Err(format!("error code is 503."));
let match_result = match error_result {
Ok(x) => format!("{} ok.", x),
Err(x) => format!("{}", x),
};
println!("{}", match_result);
}
200 ok.
error code is 503.
感想
- 割と書いてて楽しい
- 最初とっつきづらいかと思ったけど思ったより書ける