LoginSignup
2
0

More than 3 years have passed since last update.

Rustのデータ型について

Posted at

まえがき

この記事はRUSTチュートリアルをZerobillbank社内メンバー(有志)で勉強がてら、可能な限りわかりやすく内容を書き出す企画の一部です。

なお、初学者のため(略)という免責を打ちつつ間違いなどあればコメントで教えていただけますと一同嬉しく思います!

本項は変数と可変性について記載します。
https://doc.rust-jp.rs/book/second-edition/ch03-01-variables-and-mutability.html

データ型

まずRustは静的型付き言語ですので、コンパイル時に全ての変数の型が判明している必要があります。
今回は基本となる「スカラー型」と「複合型」についてかきます。

型推論

2つの型の前に型推論についてです。

Rustには型推論があるので、基本は値や使用法に基づいてコンパイラが自動で型を判別します。

let guess: u32 = "42".parse().expect("Not a number!"); 

ただし、複数の型になる可能性がある場合は型注釈が必要です。

let guess = "42".parse().expect("Not a number!"); // この場合は型が推論出来ずにコンパイルエラー

error[E0282]: type annotations needed
              (型注釈が必要です)
 --> src/main.rs:2:9
  |
2 |     let guess = "42".parse().expect("Not a number!");
  |         ^^^^^ cannot infer type for `_`
  |               (`_`の型が推論できません)
  |
  = note: type annotations or generic parameter binding required
    (注釈: 型注釈、またはジェネリクス引数束縛が必要です)

スカラー型

整数型

整数は符号あり or 符号なしとサイズによって以下の型があります。

大きさ 符号付き 符号なし
8-bit i8 u8
16-bit i16 u16
32-bit i32 u32
64-bit i64 u64
arch isize usize

isizeとusizeは実行環境のCPUアーキテクチャに合わせてサイズが決まる型のようです。

浮動小数点型

浮動小数点数は2種類の基本型があります。
f32型、f64型です。

下記のとおり、明示的に型を指定しない場合は64bitになります。

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

論理値型

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

文字型

文字型としてchar型が用意されています。
char型はユニコードのスカラー値を表します。

fn main() {
   let c = 'z';
   let z = 'ℤ';
   let heart_eyed_cat = '😻';
}

Stringなどの文字列型は別の記事で紹介します。

複合型

タプル型

複数の値を一つにまとめることができます。
また、まとめた値は分解することができます。

fn main() {
    let tup = (500, 6.4, 1);
    let (x, y, z) = tup; // 分解
    println!("The value of y is: {}", y);
}

配列型

一般的な配列です。
ただし、Rustの配列は固定長なので注意が必要です。後からサイズを伸ばすことも縮めることもできません。

fn main() {
    let a = [1, 2, 3, 4, 5];
}

1年の月の名前を扱うプログラムなどの場合は月を追加したり削除する必要はないと思うので、
配列が適してるかもしれません。

let months = ["January", "February", "March", "April", "May", "June", "July",
              "August", "September", "October", "November", "December"];

可変長のコレクション型を使いたい場合は標準ライブラリで用意されているベクタ型を使う必要があります。

配列の要素にアクセス

fn main() {
    let a = [1, 2, 3, 4, 5];

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

さいごに

ZEROBILLBANKでは一緒に働く仲間を募集中です。
ZEROBILLBANK JAPAN Inc.

2
0
0

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
2
0