スキップしてメイン コンテンツに移動

Rustで変数の型を明示的に指定する方法


Rustでは、変数名の後ろに : 型名 を付与することで、すべての変数の型を明示的に指定できます。

Rust
// C言語: uint32_t count = 0;
let count: u32 = 0;

// C言語: int32_t offset = -10;
let offset: i32 = -10;
Rustはデフォルトで変数が「変更不可(イミュータブル)」となるため、後から値を変更(再代入)したい場合は mut キーワードを付けます。

Rust
// C言語: size_t index = 0;
let mut index: usize = 0;

index = 1; // mutがあるので変更可能

主なプリミティブ型とC言語の対応

ハードウェアに近い制御や厳密なデータ管理が求められる場面では、ビット幅を明示した型指定が多用されます。

  • u8, u16, u32, u64: 符号なし整数(uint8_t 等に相当)

  • i8, i16, i32, i64: 符号付き整数(int8_t 等に相当)

  • usize: メモリアドレスのサイズ(ポインタ長)に依存する符号なし整数(size_t に相当)

  • isize: ポインタ長に依存する符号付き整数(ptrdiff_t に相当)

  • f32, f64: 浮動小数点数(float, double に相当)

型の明示が「必須」となる場面

関数内のローカル変数は型を省略(推論)することが許可されていますが、関数のインターフェース(引数と戻り値)および定数については、言語仕様として型の明示が強制されます。

Rust
// 引数 (a, b) と戻り値 (-> u32) は型の明示が必須
fn calculate_offset(base: u32, offset: u32) -> u32 {
    base + offset
}

// 定数 (const / static) も型の明示が必須
const BASE_ADDRESS: u32 = 0xA0000;
すべてのローカル変数に型を明示する方針でコードを書けば、LSPの支援がないプレーンなVim上でも、C言語と同等の厳密な可読性を維持したまま開発を進めることができます。

コメント