Rust by Example読んだ
Rustの知見を深めるために読んでみた。
1章, 2章
1. Hello World
1.1 Comments
コメントの書き方
ブロックコメントはネストできる。
/* /* /* print!("1"); */ print!("2"); */ print!("3"); */ print!("4");
1.2 Formatted print
マクロの主なものとしては以下となる。
マクロ | 説明 |
---|---|
format! | 結果を String として返す |
print! | 標準出力に出力 |
println! | 標準出力に出力(改行あり) |
eprint! | 標準エラーに出力 |
eprintln! | 標準エラーに出力(改行あり) |
マクロの詳細な使い方はstd::fmt モジュールのUsageを参照。
1.2.1 Debug
マクロのフォーマット文字列に {:?}
マーカーを利用する。
カスタム実装をする場合は std::fmt::Debug
トレイトを実装する必要がある。
以下のように derive
属性を利用することによって構造体に Debug
トレイトを自動で実装してくれる。
#[derive(Debug)] struct Point {x: i32, y: i32}
またマクロのフォーマット文字列に {:#?}
マーカーを利用すると整形して出力することができる。
1.2.2 Display
マクロのフォーマット文字列に {}
マーカーを利用する。
カスタム実装する場合は std::fmt::Display
トレイトを実装する必要がある。
Display
トレイトを実装すると型を文字列に変換する std::string::ToString
トレイトが自動で実装される。
1.2.2.1 Testcase: List
Display
トレイトの実装例
Display
トレイト実装にあたって、 fmt
は std::fmt::Result
を利用するため ?
演算子を利用するとよい。
1.2.3 Fortmatting
整形出力のオプションについて
std::fmtのFormatting Parametersを参照するのがよさそう。
2. Primitives
プリミティブ型について
- スカラー型
- 符号付き数値型: i8, i16, i32, i64, i128, isize(ポインタサイズ)
- 符号なし数値型: u8, u16, u32, u64, u128, usize(ポインタサイズ)
- 実数型: f32, f64
- 文字型: char (4バイト)
- 真偽値型: bool
- ユニット型: ()
- 複合型
- 配列
- タプル
2.1 Literals and operators
リテラルと演算子
型 | 例 |
---|---|
整数 | 1 |
実数 | 1.2 |
文字 | 'a' |
文字列 | "abc" |
真偽値 | true |
ユニット型 | () |
整数は以下の進数で表すことができる。
進数 | プレフィクス |
---|---|
16 | 0x |
8 | 0o |
2 | 0b |
数値リテラルは以下のように_
を間に入れて読みやすくすることができる。
// 同じ let n = 1_000; let n = 1000; // 同じ let f = 0.000_000_1; let f = 0.000_000_1;
演算子についてはこちらを参照
2.2 Tuples
タプルは丸括弧を利用して、複数の様々な型を持つ型を作れる。
//型推論されるため実際は型は書かなくてもよい let a :(i32, &str) = (123, "abc"); //上と同じ let a = (123, "abc");
2.3 Arrays and Slices
配列は複数の同じ型の持つ型であり、連続したメモリに格納される。 角括弧を利用して作成する。サイズはコンパイル時に決定する。
//型、サイズともに推論されるため、型は書かなくてもよい。 let a :[i32; 3] = [1, 2, 3]; //上と同じ let a = [1, 2, 3]; // 100個の5を持つ配列を定義 let b :[i32; 100] = [5; 100]; // 同様に型は書かなくてもよい。 let b = [5; 100];
スライスは配列と似ているが、コンパイル時にサイズは不明。
let a = [1, 2, 3]; // スライスを定義 let b: &[i32] = &a; // 型はなくても良い。 let b = &a;