Rust データ型

Rust 言語の基本データ型には、次の種類があります。

整数型(Integer)

整数型は略して整型とも呼ばれ、ビット長と符号の有無に応じて以下の種類に分けられます。

ビット長 符号付き 符号なし
8-bit i8 u8
16-bit i16 u16
32-bit i32 u32
64-bit i64 u64
128-bit i128 u128
arch isize usize

isize と usize の 2 つの整数型はデータの大きさを測るために使われ、そのビット長は実行対象のプラットフォームに依存します。32 ビットアーキテクチャのプロセッサの場合は、32 ビット長の整数型を使用します。

整数の表現方法には次の種類があります。

進数 例
10進数 98_222
16進数 0xff
8進数 0o77
2進数 0b1111_0000
バイト(u8 型のみ表せます) b'A'

明らかに、一部の整数の途中にはアンダースコアが含まれています。この設計により、大きな数値を入力する際に、その値がおよそどれくらいかを判断しやすくなります。

浮動小数点型(Floating-Point)

Rust は他の言語と同様に 32 ビット浮動小数点数(f32)と 64 ビット浮動小数点数(f64)をサポートしています。デフォルトでは、64.0 は 64 ビット浮動小数点数を表します。現代のコンピュータプロセッサでは、2 つの浮動小数点数の計算速度はほぼ同じですが、64 ビット浮動小数点数の方が精度が高いためです。

例

fn main() {
    let x = 2.0; // f64
    let y: f32 = 3.0; // f32
}

数学演算

数学演算を示すプログラム例:

例

fn main() {
    let sum = 5 + 10; // 加算
    let difference = 95.5 - 4.3; // 減算
    let product = 4 * 30; // 乗算
    let quotient = 56.7 / 32.2; // 除算
    let remainder = 43 % 5; // 剰余
}

多くの演算子の後に = を付けると自己代入(複合代入)を意味します。例:

sum += 1以下と同等ですsum = sum + 1。

注意:Rust はサポートしていません++と--。なぜなら、これらの 2 つの演算子が変数の前後に現れるとコードの可読性に影響し、開発者が変数の変化を意識する能力を弱めるからです。

ブール型

ブール型は bool で表され、値は true または false のみです。

文字型

文字型は char で表されます。

Rust の char 型のサイズは 4 バイトで、Unicode スカラー値を表します。つまり、中国語、日本語、韓国語の文字などの非英語文字だけでなく、絵文字やゼロ幅スペースも Rust では有効な char 値としてサポートされます。

Unicode 値の範囲は U+0000 から U+D7FF までと U+E000 から U+10FFFF までです(両端を含みます)。ただし、「文字」という概念は Unicode には存在しないため、「文字」が何かという直感は Rust の文字の概念と一致しないかもしれません。そのため、通常は UTF-8 テキストを保存するために文字列を使用することをお勧めします(非英語文字はできるだけ文字列に含めます)。

注意:中国語の文字コードには 2 種類(GBK と UTF-8)があるため、プログラミングで中国語の文字列を使用すると文字化けが発生する可能性があります。これはソースプログラムとコマンドラインの文字コードが一致しないためです。そのため、Rust では文字列と文字は必ず UTF-8 エンコーディングを使用しなければならず、そうしないとコンパイラがエラーを報告します。

複合型

タプルは 1 組の( )囲まれたデータ群で、異なる種類のデータを含むことができます:

例

let tup: (i32, f64, u8) = (500, 6.4, 1);
// tup.0 は 500 に等しい
// tup.1 は 6.4 に等しい
// tup.2 は 1 に等しい
let (x, y, z) = tup;
// y は 6.4 に等しい

配列は 1 組の[ ]囲まれた同型データ群です。

例

let a = [1, 2, 3, 4, 5];
// a は長さ 5 の整数配列です

let b = ["January", "February", "March"];
// b は長さ 3 の文字列配列です

let c: [i32; 5] = [1, 2, 3, 4, 5];
// c は長さ 5 の i32 配列です

let d = [3; 5];
// let d = [3, 3, 3, 3, 3]; と同等です

let first = a[0];
let second = a[1];
// 配列アクセス

a[0] = 123; // エラー:配列 a は不変です
let mut a = [1, 2, 3];
a[0] = 4; // 正しい
その他の拡張