Rustプログラミング言語に関する 投稿では、変数、定数、.NET Frameworkについて言及しました。
データ型に行き着くのは当然のことです。
データタイプは何ですか?
この語彙を増やし、語順を変えると答えが出ます。「データ型」→「データの型」。
コンピュータはデータを保存するためにandを使用しますが、データを読み取る際に意味を持たせるために、これらのandの意味を表すデータ型が使用されます。
Rustには2つのデータ型があります:
- スカラー・データ型:単一の値しか格納できないデータ型。
- 複合データ型:異なる型であっても複数の値を格納できます。
以下は、Rustの4つの主要なスカラーデータ型の概要です:
- Integer: 整数を格納します。それぞれのケースに応じたサブタイプがあります。
- 浮動小数点数:小数部分を持つ数値を格納します。2つのサイズベースのサブタイプがあります。
- 文字: UTF-8エンコーディングを使って個々の文字を保存します。
- Boolean: true または false を格納します。
整数
プログラミング言語では、整数は整数を指し、Rustの整数は符号付きか符号なしです。符号なし整数には 0 と正の数しか格納できませんが、 符号付き整数には負、0、正の数を格納できます。
符号付き整数の範囲は - から始まり -1 で終わります。同様に、符号なし整数の範囲は - から始まり -1 で終わります。
これは符号と長さによって利用できる整数型です:
sizeを使用する整数型は、コンピュータのアーキテクチャによって異なります。8ビットマイコンでは*8、古い32ビットコンピュータでは*32、最近の64ビットシステムでは*64です。
sizeの使用は、ポインタやオフセットなど、メモリ関連のデータを格納するためです。
明示的に integer のサブタイプを指定しなかった場合、Rust コンパイラはデフォルトで i32 を推測します。 当然ながら、i32 が格納できる値より大きかったり小さかったりすると、Rust コンパイラは丁寧にエラーを報告して手動で型を指定するように指示します。
Rustでは、整数を10進数だけでなく、2進数、8進数、16進数で格納することができます。
読みやすくするために、大きな数字を書いたり読んだりするときには、カンマの代わりにアンダースコア _ を使うことができます。
fn main() {
let bin_value = 0b; // 接頭辞 "0b "を使う”バイナリを表現する
let oct_value = 0o105; // 接頭辞 "0o "を使う”8進数を表現する
let hex_value = 0x45; // 接頭辞 "0x "を使う”16進数を表現する
let dec_value = 1_0; // の場合のグラムの書き方と同じである。
println!("バイナリ値: {bin_value}");
println!("オクタル値: {oct_value}");
println!("16進数値: {hex_value}");
println!("10進数値: {dec_value}");
変数bin_value、oct_value、hex_valueには、それぞれ2進数、8進数、16進数を使って10進数69を格納しました。変数dec_valueには、数字を格納し、カンマの代わりにアンダースコアを使用しました。国際的な数え方に慣れている人は、_000と書くことができます。
このバイナリをコンパイルして実行すると、次のような出力が得られます:
バイナリ値: 69
オクタル値: 69
16進数値: 69
浮動小数点数
浮動小数点数は、小数部分を持つ数値を格納するデータ型です。
Rustの整数とは異なり、浮動小数点数には2つのサブタイプしかありません:
- f32単精度浮動小数点数型
- 倍精度浮動小数点数f64
Rustの整数と同様、Rustが変数の型を推測する際、それが浮動小数点数のように見える場合はf64型が与えられます。これは、f64型がf32型よりも精度が高く、ほとんどの計算処理でf32型とほぼ同等の速度が得られるためです。注意してください。
Rustプログラミング言語は、2進浮動小数点表現と算術のための IEEE 457 標準に従って浮動小数点数を格納します。
fn main() {
let pi: f00; // f32
let golden_ratio = 1.; // f64
let five = 5.00; // 小数点は浮動小数点数として推論されることを意味する
let six: f64 = 6.; // 型の記述が明示 に追加され、小数点が** **的
println!("pi: {pi}");
println!("黄金比: {golden_ratio}");
println!(" : {five}");
println!(" : {six}");
5行目をよく見てください。すでに変数6の型を指定しているにもかかわらず、少なくとも小数点を1つ加えなければなりません。小数点以下をどうするかはあなた次第です。
プログラムのアウトプットはかなり予測可能ですが...。 そうですか?
pi: 3.14
黄金比: 1.61
上の出力で、変数宣言の最後に追加したゼロが、変数π、golden_ratio、fiveに格納された値を表示するときに消えていることにお気づきでしょうか。
仮にゼロがなかったとしても、printlnマクロで値を出力するときには省略されていたはずです。つまり、Rustは変数の値を改ざんしていません。
文字
char型の変数に文字を格納できます。80年代の伝統的なプログラミング言語のように、 ASCII 文字を格納できます。しかしRustは、有効なUTF-8文字を格納できるように文字型を拡張しています。つまり、顔文字を
いくつかの顔文字は、実際には既存の2つの顔文字を組み合わせたものです。良い例は、「燃えるハート」の絵文字です: ❤️🔥。この顔文字は、 ゼロ幅コネクタを 使用して2つの顔文字を組み合わせて作られています: + = ❤️🔥
Rustの文字タイプでは、このような顔文字を格納することはできません。
fn main() {
let a = 'a';
let p: char = 'p'; // 明示的な型記述
let crab = '';
println!("Oh look, {} {}! :{}", a, crab, p);
ご覧のように、ASCII文字の'a'と'p'を変数aとpに格納しました。また、有効なUTF-8文字であるカニの顔文字を変数crabに格納しました。そして、それぞれの変数に格納されている文字を表示しました。
これが出力です:
Oh look, a ! :p
ブール値
Rustでは、boolean型はtrueかfalseの2つの値のどちらか一方のみを格納します。明示的に型を指定したい場合はboolを使います。
fn main() {
let val_t: bool = true;
let val_f = false;
println!("val_t: {val_t}");
println!("val_f: {val_f}");
上記のコードをコンパイルして実行すると、結果は次のようになります:
val_t: true
val_f: false
ボーナス:明示的な型変換
Rustプログラミング言語の変数に関する前回の投稿では、非常に基本的な 温度変換ルーチンを紹介しました。そこでは、Rustでは暗黙の型変換ができないことを述べました。
しかし、だからといってRustが型変換を許さないわけではありません;)
明示的な型変換を行うには、as キーワードの後に変換するデータ型を続けます。
これはサンプルプログラムです:
fn main() {
let a = 3 as f64; // f64
let b = 3.9 as i32; // i32
println!("a: {a}");
println!("b: {b}");
2行目では、3.0を使う代わりに、その後ろにas f64と書き、コンパイラに64ビット浮動小数点型変換をさせたいことを示します。3行目も同じです。しかし、ここでは型変換は非可逆です。つまり、小数部を.3.9として格納する代わりに、単に.
プログラムの出力がそれを証明しています:
要約
この記事では、Rustのプリミティブ/スカラーデータ型について説明します。このようなデータ型には、主に integer、float、character、boolean の4つがあります。
整数は整数を格納するために使用され、符号付きか符号なしかと長さに基づいていくつかのサブタイプがあります。浮動小数点数は小数を含む数値を格納するために使用され、その長さに基づいて2つのサブタイプがあります。文字データ型は、UTF-8でエンコードされた1つの有効な文字を格納するために使用されます。最後に、ブール値は真または偽の値を格納するために使用されます。
次の章では、配列やタプルなどの複合データ型について説明します。ご期待ください。




