Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
let / mut / const / static
Rustでは『let』で変数を宣言し、デフォルトでは不変(immutable)です。可変にするには『mut』が必要です。『const』と『static』はプログラム全体で有効な定数・静的変数を定義します。
構文
// 不変変数 let 変数名: 型 = 値; let 変数名 = 値; // 型推論を使用します。 // 可変変数 let mut 変数名 = 値; // 定数(型注釈が必須・コンパイル時評価) const 定数名: 型 = 値; // 静的変数(プログラム全体で有効なメモリを持ちます) static 変数名: 型 = 値; // シャドーイング(同名の変数を再宣言します) let 変数名 = 値; let 変数名 = 新しい値; // 前の変数を隠します。
宣言方法一覧
| 宣言 | 可変性 | 概要 |
|---|---|---|
| let x = 値 | 不変 | デフォルトの変数宣言です。再代入はできません。 |
| let mut x = 値 | 可変 | 再代入・変更が可能な変数です。 |
| const NAME: 型 = 値 | 不変 | コンパイル時に評価される定数です。型注釈が必須です。 |
| static NAME: 型 = 値 | 不変 | 固定メモリアドレスを持つ静的変数です。'staticライフタイムを持ちます。 |
| シャドーイング | 不変→不変 | 同名で再宣言して値・型を変えられます。元の変数は隠れます。 |
サンプルコード
const MAX_POINTS: u32 = 100_000;
static GREETING: &str = "こんにちは";
fn main() {
// 不変変数
let x = 5;
// x = 6; // エラー:不変変数には再代入できません。
// 可変変数
let mut y = 5;
y = 6; // 再代入できます。
println!("y = {}", y); // 『6』と出力されます。
// 型推論
let z = 3.14; // f64と推論されます。
println!("z = {}", z);
// シャドーイング(型を変えることもできます)
let spaces = " "; // &str型
let spaces = spaces.len(); // usize型(型が変わっています)
println!("spaces = {}", spaces); // 『3』と出力されます。
// シャドーイングでの変換
let mut count = 0;
count += 1;
let count = count; // 可変から不変に固定します。
println!("MAX: {}", MAX_POINTS);
println!("{}", GREETING);
println!("count: {}", count);
}
概要
Rustでは変数がデフォルトで不変であるため、意図しない変更を防げます。可変性が本当に必要な場合にのみ『mut』を使うことで、コードの意図が明確になります。
シャドーイングは『mut』とは異なり、型の変換やスコープ内での再利用に便利です。ただし『mut』変数のシャドーイングで可変性を失わせるパターンは、意図を明示的にコメントしておくとよいでしょう。
数値リテラルにはアンダースコア(_)を区切り文字として使えます(例:『100_000』)。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。