[Rust学習] 基本型

2024年3月31日

Rust プログラミング 学習

eyecatch Rustの学習を進めていると、型についてちゃんと理解しておかないとダメだと気が付きました。 ていうか、普通これが最初だろ! というツッコミがたくさん聞こえて来るので(心の声も含めて)、今回はRustの型について学習を進めたいと思います。

Rustの型について

以下の基本型があるようです。
  1. 整数型
  2. 浮動小数点型
  3. 文字列型
  4. 関数型
  5. bool型

1. 整数型

int

let num:i8 = 8; 8ビット整数型の定義です。 構文は、次のような意味を含んでいます。 let : 変数定義 num : 変数名 i8 : int 8bitの意味 =8 : 値を代入 8ビット以外にも、 num:i16 num:i32 のように、ビット数を変えて書くことで定義することが可能です。

unsigned

また、符号なし整数型は次のように書きます。 let num:u8 = 8; intが、unsignedの頭文字になります。

最大値と最小値

max_min.rs fn main(){ let max_val = i8::max_value(); let min_val = i8::min_value(); println!("{} , {}", max_val, min_val); } 実行 $ rustc max_min.rs $ ./max_min > 127 , -128 ビット数に応じて、最大値と最小値を取得することができます。

isize , usize

iやらuやらのそれぞれのビット数というのは、一体何なのかというと、使っているパソコンのビット数を使うというのが一般的です。 32bitパソコンであれば、i32やu32、64bitパソコンであれな、i64やu64という感じです。 そのサイズより下のビット数を使っていれば問題はありませんが、許容を超えるビット数を使うとエラーになるので、この点を意識して使いましょう。 Rustでのデフォルト整数ビット数は、32ビットのようなので、ビット指定をしない場合は、i32でセットされるようですね。

2. 浮動小数点型

何かとエラーの元になりがちな浮動小数の扱いはRustでもできます。 整数型と同じように、次のように書くことで浮動小数点型の定義ができます。 let num: f32 = 10.1; f32の他に、f64もちゃんと用意されていて、それぞれのmin-max値は以下のようになっています。
f32 : -3.4028235e38 ~ 3.4028235e38 f64 : -1.7976931348623157e308 ~ 1.7976931348623157e308

エラー注意

floatの値に整数値をセットすると、コンパイルエラーがでます。 float.rs fn main(){ let num1:f32 = 1.001; let num2:f32 = 1; println!("{} , {}", num1, num2); } 実行 $ rustc float.rs error[E0308]: mismatched types --> float.rs:3:18 | 3 | let num2:f32 = 1; | --- ^ | | | | | expected `f32`, found integer | | help: use a float literal: `1.0` | expected due to this error: aborting due to 1 previous error For more information about this error, try `rustc --explain E0308`. 整数型、少数型をちゃんと切り分けてプログラミングしましょうね。

3. 文字列型

Rust言語の文字列型は、String と &str の2種類があります。

String

有効なUTF-8の配列であることを保証されたバイトのベクタ(Vec<u8>)として保持されます。 ヒープ上に保持され、伸長可能で、末端にnull文字を含みません。

&str

有効なUTF-8の配列のスライス(&[u8])で、いつでもStringに変換することができます。 &[T]がいつでもVec<T>に変換できるのと同様です。 &strはプリミティブ型で、Stringのリテラルになります。

サンプルコード

コピペしただけなので、わかりにくい文章になっていますが、自分が理解したのは、Stringを使ったほうがいいかもよという事です。 ポインタなどが理解できてから、&strを使うのがいいでしょう。 str.rs fn main(){ let s1 = "str-1"; let s2: &'static str = "str-2"; let s3: String = String::from("str-3"); let s4: &str = &s1[0..2]; println!("{}, {}, {}, {}" , s1, s2,s3,s4); } 実行 $ rustc str.rs $ ./str > str-1, str-2, str-3, st &strで文字列を取り出しているサンプルは、配列番号っぽい箇所の数値がつまづきポイントなので、自分で数値を変えて内容を理解しておきましょう。

4. 関数型

Rustの関数は、fnで定義できます。 これまで何度も書いてきましたね。 c言語などと同じ様に、main関数が必ず必要で、必要に応じて他の関数を増やすことができます。 fn main(){ println!("{},{},{}", str(), int(), float()); } fn str() -> String{ return "Test value.".to_string(); } fn int() -> i32{ return 1; } fn float() -> f32{ return 2.01; } main以外のfunctionを定義して、それぞれの返り値を取得する書き方を簡単に書いてみました。 i32やf32の他に文字列の場合は、to_string()で文字列変換して、Stringで返す定義をする必要があります。 どれかを怠ると、コンパイルエラーになるので、注意。

5. bool型

ほとんどのプログラミング言語の共通しようで、bool型(ブーリアン型)は、 trueとfalseを、1と0として扱い、◯か☓かを判定する判定値として扱われます。 if文などの条件分岐の条件文の箇所がブーリアンとして考えるとわかりやすいですね。 bool.rs fn main(){ let bool1 = true; let bool2 = false; println!("{}, {}", bool1, bool2); } 実行 $ rustc bool.rs $ ./bool > true, false さほど気を使う部分もないので、概念として覚えておくのがいいでしょう。

参考

Rust入門「データ型」 [Rust] isize、usizeとは 【Rust】整数型、浮動小数点型 Rust By Example 日本語版「文字列」 Rustの文字列を理解する

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。