変数と変数可能性 - Rust
Rustにおける変数の基礎について、公式ドキュメントを見ながらまとめてみた(まとまってはいないけど)
- 不変変数として宣言されていることで、その変数は変更されないことが保証される。プログラミング中やコードを読んでいるときに、値が変更されるかどうかを宣言の文を見れば把握できる。
- 可変変数にするには
mut
キーワードをつけて宣言する
// 不変変数の`x`を宣言 let x = 5; println!("The value of x is: {}", x); // 不変変数に再度代入しようとしているためエラー x = 6; println!("The value of x is: {}", x); // mutで値を変更可能になる let mut y = 5; println!("The value of y is: {}", y); y = 6; println!("The value of y is: {}", y);
定数
- 定数と変数の違いは定数は常に不変。変数はデフォルトで不変
- 定数には
mut
を使うことはできない(可変にはできない) - 宣言時には
let
の代わりにconst
を使う - 必ず型注釈をつける
const MAX_POINTS: u32 = 100_000;
変数を覆う(シャドーイング)
- 以前に宣言した変数を新しい変数として再度宣言することができる機能
mut
キーワードとは区別される。なぜなら、シャドーイングの場合には、その後も不変であるが、mut
はその後も可変であるため。
// shadowing let x = 1; let x = x * 2; println!("The value of x is: {}", x); // これはコンパイルエラーになる x = x + 4; // mutキーワード let mut y = 1; y = y + 2; println!("The value of y is: {}", y);
mut
では再代入の時に型を変更できない。しかし、シャドーイングだと新しい変数を作成していることになるため、型の変更ができる。
// change type let spaces = " "; let spaces = spaces.len(); // OK let mut spaces2 = " "; spaces2 = spaces2.len(); // compile error