TL;DR
- Rustの**
プリミティブ型
**について、まとめてあります。
実行環境
ハードウェア
項目 | 情報 |
---|---|
OS | macOS Catalina(10.15.4) |
ハードウェア | MacBook Pro (13-inch, 2019, Two Thunderbolt 3 ports) |
プロセッサ | 1.4 GHz クアッドコアIntel Core i5 |
メモリ | 16 GB 2133 MHz LPDDR3 |
ソフトウェア
項目 | 情報 |
---|---|
言語 | Rust(1.46.0) |
プリミティブ型
bool
The boolean type.
true
とfalse
で値を決定します。(Pythonでは、True
とFalse
)
fn main() {
let bool_true = true;
let bool_false = false;
}
fn
Function pointers, like fn(usize) -> bool.
pointer
Raw, unsafe pointers, *const T, and *mut T.
reference
References, both shared and mutable.
slice
A dynamically-sized view into a contiguous sequence, [T]. Contiguous here means that elements are laid out so that every element is the same distance from its neighbors.
unit
The () type, also called "unit".
文字列系
char
A character type.
str
String slices.
**str
は、文字列スライスと呼ばれており、メモリ上に存在する文字列データのスタート地点と長さを示しています。そのため、文字列自体の変更は出来ません。
変更可能な文字列型は、標準ライブラリ提供型のString
**です。
Pythonから流れてきた身としては、ここの使い分けのイメージがあまり分からない。。。
集合系
array
A fixed-size array, denoted [T; N], for the element type, T, and the non-negative compile-time constant size, N.
配列は、特定の型の値を連続に収めてある集合です。配列のサイズはコンパイル時に定まっている必要があります。そのため、Pythonの.append()
や.extend()
などを使って配列サイズを変更することは出来ません。
内部の値にアクセスする際には、[]
を使います(Pythonなどと同じ)。また、配列を参照するときには、自動的にスライスとして扱われます。
配列それ自体には、イテレーターとしての機能を持ち合わせていないため、for文などで使用する場合には、iter()
メソッドを使ってあげる必要があります。配列サイズが32個以下の場合には、**IntoIterator
**で実装することも可能です。(なんで32個という制限があるんでしょうか。。。)
fn main() {
let array_a: [i32; 6] = [0, 1, 2, 3, 4, 5];
for x in array_a.iter() { } // OK
for x in array_a { } // コンパイルエラー
let array_b: [i32; 32] = [0; 32];
for x in &array_b { } // OK
let array_c: [i32; 33] = [0; 33];
for x in &array_c { } // コンパイルエラー
}
tuple
A finite heterogeneous sequence, (T, U, ..).
tuple
は生成された際に格納された値の型を全て含めて一つの型を構成します。そのため、**一度生成したタプル内の一部の型だけ変更することは出来ません。**内部の値にアクセスする際には、.0
といった形式で指定します。
fn main() {
let mut tuple = ("hello", 5, "c");
tuple.0 = "hoge"; // 出来る
tuple.0 = 0; // コンパイルエラー
}
数値系
浮動小数点
f32, f64
The XX-bit floating point type.
浮動小数点型。
整数
i8, i16, i32, i64, i128
The XXX-bit signed integer type.
符号付き整数型。
u8, u16, u32, u64, u128
The XXX-bit unsigned integer type.
符号無し整数型。
isize
The pointer-sized signed integer type.
ポインタサイズの符号付き整数型。
usize
The pointer-sized unsigned integer type.
ポインタサイズの符号なし整数型。