kdnakt blog

hello there.

Rust dojo第13回を開催した

第13回です。

前回はこちら。

kdnakt.hatenablog.com

 

 

[第13回の様子]

2021/10/06に第13回を開催した。

 

内容としてはRust By Example 日本語版の「3.3. 定数」、「4. 変数バインディング」に取り組んだ。

 

参加者は少し増えて、全部で11人くらいいたはず。初参加のメンバーもいた!

 

Slackでの書き込みはちょっと増えてた。

f:id:kidani_a:20211007234032p:plain

f:id:kidani_a:20211007234112p:plain

f:id:kidani_a:20211007234239p:plain

 

[学んだこと]

  • 3.3. 定数
  • 定数はconstとstaticの2通りの方法がある
  • どちらもグローバルスコープ含む任意のスコープで宣言できる
  • constが不変で通常はこちらを利用する
const THRESHOLD: i32 = 10;

fn is_big(n: i32) -> bool {
    // 関数内で定数を参照
    n > THRESHOLD
}
  • staticは変更できなくはないが、実際に変更しようとすると相当むずかしい
  • staticなライフタイムについてはまた後半で登場するようなのでいったん忘れることに。
  • staticはミュータブルと書かれていたが、実際にやってみるとエラーになった
static LANGUAGE: &str = "Rust";
fn main() {
    LANGUAGE = "not rust";
    println!("This is {}", LANGUAGE);
}

// 以下のコンパイルエラー
   Compiling playground v0.0.1 (/playground)
error[E0594]: cannot assign to immutable static item `LANGUAGE`
  --> src/main.rs:14:5
   |
14 |     LANGUAGE = "not rust";
   |     ^^^^^^^^^^^^^^^^^^^^^ cannot assignど
  • どうしてstaticな変数を変更したければlazy_staticとかone_cellを使うといいらしい

zenn.dev

fn main() {
    let noisy_unused_variable = 2u32;
}

// 以下の警告
warning: unused variable: `noisy_unused_variable`
  --> src/main.rs:20:9
   |
20 |     let noisy_unused_variable = 2u32;
   |         ^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_noisy_unused_variable`
   |
   = note: `#[warn(unused_variables)]` on by default
  • 変数名を_始まりにするとこの警告は消える
  • しかし、特に理由がなければ、警告がでたら大人しく使ってない変数を消す方が良さそう

 

[まとめ]

モブプログラミングスタイルでRust dojoを開催した。

今週は比較的落ち着いた内容だった。staticでわたわたしたけど...。

 

今週のプルリクエストはこちら。

github.com