LoginSignup
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-03-24

スカラー型

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];
}

参考文献

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1