🌊

Rustにおけるスカラー型と複合型

2021/03/25に公開

スカラー型

Rustにおけるスカラー型は4つあります。

  • 整数
  • 浮動小数点数
  • 論理値
  • 文字

整数

大きさ 符号付き 符号なし
8-bit i8 u8
16-bit i16 u16
32-bit i32 u32
64-bit i64 u64
arch isize usize
  • 例えばu32型の場合、符号なし整数になるので、32ビット分のサイズを取ります。
  • ちなみに符号付きと符号なしは、数値が正負どうかを示します。
  • isize型usize型は、プログラムが動作しているコンピュータの種類に依存します。
  • 64ビットアーキテクチャの場合、64ビットになります。
  • 32ビットアーキテクチャの場合、32ビットになります。

浮動小数点数

  • Rustの浮動小数点型は、f32型f64型の2つです。
  • 基準型はf64型です。

f32型

  • f32型は、単精度浮動小数点数で、32ビットです。

f64型

  • f64型倍精度浮動小数点数で、64ビットです。

論理値

  • Rustの論理値型は、truefalseの2つです。

例:

fn main() {
    let f: bool = false;
}

文字

  • Rustの文字は、char型です。
  • char型は、ユニコードのスカラー値を表します。
  • そのため、アクセント文字、中国語、日本語、韓国語、絵文字、ゼロ幅スペースは有効なchar型になります。

複合型

  • 複合型とは、複数の値を一つの型にまとめることができます。
  • 複合型には、2種類の複合型があります。

タプル型

  • タプル型は、複数の型の値を一つの複合型にまとめ上げるものです。
  • ()の中にカンマ区切りの値のリストを書くことで生成します。

例:

fn main() {
    let tup: (i32, f64, u8) = (500, 6.4, 1);
}
  • またタプル型からパターンマッチングを使用して、個々の値を取り出すことができます。

例:

fn main() {
    let tup = (500, 6.4, 1);
    let (x, y, z) = tup;

    println!("{}", y);
}

[実行結果]

❯ cargo run                
   Compiling variables v0.1.0 (/Users/yoshitaka.koitabashi/Desktop/variables)
warning: unused variable: `x`
 --> src/main.rs:3:10
  |
3 |     let (x, y, z) = tup;
  |          ^ help: if this is intentional, prefix it with an underscore: `_x`
  |
  = note: `#[warn(unused_variables)]` on by default

warning: unused variable: `z`
 --> src/main.rs:3:16
  |
3 |     let (x, y, z) = tup;
  |                ^ help: if this is intentional, prefix it with an underscore: `_z`

warning: 2 warnings emitted

    Finished dev [unoptimized + debuginfo] target(s) in 1.42s
     Running `target/debug/variables`
6.4
  • ただ、実行した結果を見てわかるように、使用していない値に関しては**_**を付けてと怒られるので、正しく使うなら下記のようになります。
fn main() {
    let tup = (500, 6.4, 1);
    let (_x, y, _z) = tup;

    println!("{}", y);
}

[実行結果]

❯ cargo run
   Compiling variables v0.1.0 (/Users/yoshitaka.koitabashi/Desktop/variables)
    Finished dev [unoptimized + debuginfo] target(s) in 0.22s
     Running `target/debug/variables`
6.4
  • この例では、まずタプルを生成し、それを変数tupに束縛しています。
  • その後、letとパターンを使ってtup変数の中身を3つの個別の変数(x、y、z)に変換しています。

=> この過程を分配と呼びます。

配列型

  • 配列型は、複数の値のコレクションを得ることができます。
  • 配列の全要素は、同じ型でなければならない。
  • またRustの配列は固定長の為、一度宣言されたらサイズを伸ばすことも縮めることもできません。
  • Rustでは、配列に入れる要素は[]内にカンマ区切りのリストとして書きます。

例:

fn main() {
    let a = [1, 2, 3, 4, 5];
}
  • 配列は、スタック上に確保されるメモリの為、添え字によって配列の要素にアクセスすることができます。
fn main() {
    let a = [1, 2, 3, 4, 5];

    let first = a[0];
    let second = a[1];
}

参考文献

Discussion