blog.dopana

Back

Rust入門シリーズの第2回です。Rustは変数の宣言と使用方法に特別な注意を払います — ここでのルールがRustの安全性を支えています。

変数はデフォルトで不変#

let name = "Ada";
name = "Grace";   // エラー: 不変の変数に2回代入できない
rust

これは意図的です。不変のデータは推論しやすく、共有しても安全です。mutで可変にします:

let mut score = 10;
score += 5;
rust

実際に必要なときだけmutを使います。

型推論#

Rustは型を推論しますが、明示することもできます:

let count: u32 = 42;
let ratio: f64 = 3.14;
let name: &str = "Rust";
let done: bool = true;
rust

スカラー型#

整数i8..i128u8..u128(符号付き/なし)
浮動小数点数f32f64
ブールbool
文字char(Unicode、4バイト)

デフォルトの整数型はi32、浮動小数点数はf64です:

let x = 5;       // i32
let y = 2.5;     // f64
rust

コンパウンド型#

タプルは任意の型の値をまとめます:

let point = (3, 5);
let (x, y) = point;   // 分解
println!("{}", point.0);   // 3
rust

配列は同じ型の値を固定長で保持します:

let primes = [2, 3, 5, 7, 11];
println!("{}", primes[0]);   // 2
rust

定数#

constの値は常に不変で、型が既知でなければなりません:

const MAX_SPEED: u32 = 120;
rust

letと違い、constは任意のスコープで宣言でき、コンパイル時にインライン展開されます。

シャドーイング#

変数名を再利用して値を変換できます。新しい値が有効になるまで古い値は保持されます:

let x = 5;
let x = x + 1;
rust

シャドーイングで型も変更できます:

let label = "12";      // &str
let label = label.len();   // usize
rust

結論#

Rustの変数ルール — デフォルト不変、明示的なmut、シャドーイング — により、データフローが予測可能になります。シリーズ次回は制御フローです。

参考文献#