【MacでRust入門】Rust日本語版チュートリアルの要点まとめ ~ 第6回 変数のデータ型
目次
こんにちは。
最近流行りのRustを初めてみよう!ということでチュートリアルを読み始めました。
内容を忘れないように & チュートリアルがTL;DRな方向けにブログ記事に要点をまとめていこうと思います。
前回はRustの変数と定数の特徴についてまとめました。
今回は第6回です。Rustの変数がとるデータ型について要点をまとめます。
Rustのデータ型
Rustは静的型付け言語で、コンパイル時に変数の型がわかっている必要があります。通常、変数の型は推論されますが、複数取りうる場合はエラーになります。
エラーを回避する方法は型注釈をつけることです。第4回の記事にその例があります。
Rustのスカラー型
スカラーは単独の値のことで、整数・浮動小数点数、論理値、文字の4種類があります。
整数型
サイズと符号有無で10のバリアント(種類)があります。
サイズ(bit) | 符号付き | 符号なし |
---|---|---|
8bit | i8 |
u8 |
16bit | i16 |
u16 |
32bit | i32 |
u32 |
64bit | i64 |
u64 |
arch | isize |
usize |
たとえばu8
は8bitなので256通り、0~255まで扱えます。i8
は符号がつくので-128から127まで扱えます。isize
とusize
は動作するOSのビット数によって32ビットか64ビットか決まります。
どれにすべきか迷ったら、とりあえず基準のi32
にしておけばOK。
また、整数リテラル(「見たままの値」という意味)は以下の記述方法があります。
リテラル | 例 |
---|---|
10進数 | 98_222 |
16進数 | 0xff |
8進数 | 0o77 |
2進数 | 0b1111_0000 |
バイト(u8 のみ) |
b'A' |
頭の0x
などで何進数か決めて、_
は桁数が多い場合に見た目の区切りに使えます。
Rustの浮動小数点型
Rustの浮動小数点数はビット違いでf32
とf64
の2種類あり、基準はf64
です。
let x = 2.0; // f64 こっちが基準
let y: f32 = 3.0; // f32
Rustの数値演算
基本的なものは大体の他の言語と同様。
// 足し算
let sum = 5 + 10;
// 引き算
let difference = 95.5 - 4.3;
// 掛け算
let product = 4 * 30;
// 割り算
let quotient = 56.7 / 32.2;
let floored = 2 / 4; // 結果は0。
// 余り
let remainder = 43 % 5;
2 / 4
の結果を0
ではなく0.5
にするには、2.0 / 4.0
にする。
【参考】他の演算子一覧はこちら : https://doc.rust-jp.rs/book-ja/appendix-02-operators.html
Rustの論理値型
こちらも予想通りtrue
とfalse
の2値。ただ、Pythonと違って小文字始まりです。
型注釈する場合はbool
。
Rustの文字型
文字「列」型とは違ってシングルクォーテーション。ユニコードのスカラー値。
型注釈はchar
。
ダブルクォーテーション(String
)とシングルクォーテーション(char
)で型が違うというのはややこしいですね。
Rustの複合型
複数の値をまとめることができ、タプルと配列の2種類があります。
Rustのタプル型
()
を使って生成する。すべて同じ型である必要はない。あえて型注釈つけると以下のようになる。
let tup: (i32, f64, u8) = (500, 6.4, 1);
逆にこのように値を取り出すこともできます。(分配と呼ばれる)
let (x, y, z) = tup;
値の番号を.
につけることで要素に直接アクセスできます。最初のインデクスは0。
let five_hundred = tup.0; // 500が入る
Rustの配列型
[]
で宣言。タプルと違って全要素が同じ型である必要があります。
let a = [1, 2, 3, 4, 5];
PythonやTypeScriptと異なり、一度宣言したら配列の長さ(要素の数)を増やしたり減らしたりできません。(え...)
なので、長さが変わらないとわかっている配列の宣言に使うことでエラーを防いだり「長さ変えるなよ!」と暗に牽制できます。
(ちなみに、長さを変えられる型として、ベクタ型という標準ライブラリに用意されたコレクション型があります。)
配列の要素にアクセスするには、[要素の番号]
でアクセスできます。
let first = a[0]; // 1
また、配列の要素外のインデクスを指定してアクセスしようとするとパニック(Rustのプログラムがエラー終了)しますので、エラー処理が必要です。
まとめ
というわけで今回はRustで変数がとるデータ型についてまとめました。
- スカラー型は整数、浮動小数、文字、論理値の4つ
- 複合型はタプルと配列の2つ
特に配列型は固定長というところがPython等の他言語と違うので注意したいですね。
次回はRustの関数についてまとめたいと思います。
それでは〜
Rust オススメの参考書籍
▼ 入門者向け。Pythonとの比較あり。Kindleでも読める。
手を動かして考えればよくわかる 高効率言語 Rust 書きかた・作りかた
▼ 中級者向け。オライリーならではの詳解。硬派な方向け。
参考リンク
Rustチュートリアル (日本語版 非公式) https://doc.rust-jp.rs/book-ja/