第6回です。
前回はこちら。
[第6回の様子]
2021/08/18に第6回が開催された。
タイトルがいつもと違うのにお気づきだろうか。今回諸事情により前のミーティングが長引いた結果、主催者たる私がRust dojoに参加できなかった。無念。
しかし、主催者がいなくともいつものメンバーで(きっと主催者の不在を嘆きながら)進めてくれたようだ。
内容としてはRust By Example 日本語版の「2. 基本データ型」を復習して、「2.1. リテラルとオペレータ」読んで手を動かした(らしい)。
参加者はたぶん全部で8人(と聞いている)。今日もなかなか盛況だった(ようだ)。
今回も、前回終了時に決めておいたメンバーに初ドライバーをお願いした。ドライバー指名制度はうまくいっているようで、次とその次の回のドライバーが決まったらしい。もしかして私がいない方がスムーズ...?😭
今週も開催前後のSlackでのやりとりがたくさん🎉
Dojo中にも書き込みが。なるほどそういうところが気になる感じね。
ドライバーやナビゲータからの参加報告。
新しいメンバーが増えた!やったね!
Rust.tokyoというイベントがあるらしい。気になる。
次は一緒に...。😭
[学んだこと]
- 前回の基本データ型の復習部分については省略。
- 2.1. リテラルとオペレータ
- リテラルで利用できる型は整数、浮動小数、文字、文字列、ブーリアン、ユニットがある
- 整数の場合、プレフィクスを利用して2進数、8進数、16進数を利用できる
0b0101 // 2進数で5 0o0101 // 8進数で65 0x0101 // 16進数で257
- 可読性のため、数値リテラルにはアンダースコアを利用できる(この辺はJava 7以降でも同じ
1_000
は1000
と同じ0.000_001
は0.000001
と同じ- 演算子と実行順序については公式ドキュメントへのリンクがあった
println!("1 + 2 = {}", 1u32 + 2); // 1 + 2 = 3 // // 違う型同士で演算しようとすると println!("1 + 2 = {}", 1u32 + 2i32); // コンパイルエラー // 5 | println!("1 + 2 = {}", 1u32 + 2i32); // | ^^^^ expected `u32`, found `i32` // error[E0277]: cannot add `i32` to `u32` // --> src/main.rs:5:33 // | // 5 | println!("1 + 2 = {}", 1u32 + 2i32); // | ^ no implementation for `u32 + i32` // | // = help: the trait `Add<i32>` is not implemented for `u32`
- また、オーバーフローもチェックしてくれる
println!("1 - 2 = {}", 1i32 - 2); // 1 - 2 = -1 // 型を符号なし整数に変更する println!("1 - 2 = {}", 1u32 - 2); // コンパイルエラー // | //8 | println!("1 - 2 = {}", 1u32 - 2); // | ^^^^^^^^ attempt to compute `1_u32 - 2_u32`, which would overflow // | // = note: `#[deny(arithmetic_overflow)]` on by default // オーバーフローしない場合は実行できる println!("1 - 1 = {}", 1u32 - 1); // 1 - 1 = 0
- 論理演算子は一般的な感じ
println!("true AND false is {}", true && false); // true AND false is false println!("true OR false is {}", true || false); // true OR false is true println!("NOT true is {}", !true); // NOT true is false
- ビット演算もできる
// 論理積 println!("0011 AND 0101 is {:04b}", 0b0011u32 & 0b0101); // 0011 AND 0101 is 0001 // 論理和 println!("0011 OR 0101 is {:04b}", 0b0011u32 | 0b0101); // 0011 OR 0101 is 0111 // 排他的論理和 println!("0011 XOR 0101 is {:04b}", 0b0011u32 ^ 0b0101); // 0011 XOR 0101 is 0110 // 左シフト println!("1 << 5 is {}", 1u32 << 5); // 1 << 5 is 32 // 右シフト println!("0x80 >> 2 is 0x{:x}", 0x80u32 >> 2); // 0x80 >> 2 is 0x20
[まとめ]
モブプログラミングスタイルでRust dojoを開催した。
これで演算子マスター!
今週のプルリクエストはこちら。