Rust-data-types

提供:Dev Guides
移動先:案内検索

Rust-データ型

型システムは、言語でサポートされているさまざまなタイプの値を表します。 タイプシステムは、プログラムによって保存または操作される前に、指定された値の有効性をチェックします。 これにより、コードが期待どおりに動作することが保証されます。 タイプシステムはさらに、より豊富なコードヒントと自動化されたドキュメントも可能にします。

Rustは静的に型付けされた言語です。 Rustのすべての値は特定のデータ型です。 コンパイラーは、割り当てられた値に基づいて変数のデータ型を自動的に推測できます。

変数を宣言する

*_let_* キーワードを使用して、変数を宣言します。
fn main() {
   let company_string = "finddevguides"; //string type
   let rating_float = 4.5;                //float type
   let is_growing_boolean = true;         //boolean type
   let icon_char = '♥';                   //unicode character type

   println!("company name is:{}",company_string);
   println!("company rating on 5 is:{}",rating_float);
   println!("company is growing :{}",is_growing_boolean);
   println!("company icon is:{}",icon_char);
}

上記の例では、変数のデータ型は、それらに割り当てられた値から推測されます。 たとえば、Rustは文字列データ型を変数_company_string_に、floatデータ型を_rating_float_に、などを割り当てます。

_println!_マクロは2つの引数を取ります-

  • 特別な構文_ \ {} _、これはプレースホルダーです
  • 変数名または定数

プレースホルダーは変数の値に置き換えられます

上記のコードスニペットの出力は次のようになります-

company name is: finddevguides
company rating on 5 is:4.5
company is growing: true
company icon is: ♥

スカラー型

スカラー型は単一の値を表します。 たとえば、10,3.14、 'c'。 Rustには4つの主要なスカラー型があります。

  • 整数
  • 浮動小数点
  • ブール値 *キャラクター

以降のセクションで各タイプについて学習します。

整数

整数は、小数部のない数字です。 簡単に言えば、整数データ型は整数を表すために使用されます。

整数は、符号付きと符号なしにさらに分類できます。 符号付き整数には、負の値と正の値の両方を格納できます。 符号なし整数は正の値のみを保存できます。 整数型が以下に与えられている場合の詳細な説明-

Sr.No. Size Signed Unsigned
1 8 bit i8 u8
2 16 bit i16 u16
3 32 bit i32 u32
4 64 bit i64 u64
5 128 bit i128 u128
6 Arch isize usize

整数のサイズは_arch_にできます。 これは、データ型のサイズがマシンの_アーキテクチャ_から導出されることを意味します。 サイズが_arch_の整数は、x86マシンでは32ビット、x64マシンでは64ビットになります。 アーチ整数は、主に何らかのコレクションのインデックスを作成するときに使用されます。

fn main() {
   let result = 10;   //i32 by default
   let age:u32 = 20;
   let sum:i32 = 5-15;
   let mark:isize = 10;
   let count:usize = 30;
   println!("result value is {}",result);
   println!("sum is {} and age is {}",sum,age);
   println!("mark is {} and count is {}",mark,count);
}

出力は以下のようになります-

result value is 10
sum is -10 and age is 20
mark is 10 and count is 30

_age_の値を浮動小数点値に置き換えると、上記のコードはコンパイルエラーを返します。

整数範囲

各署名付きバリアントは、-(2 ^(n-1)から2 ^(n-1)-1_までの数値を格納できます。nは、バリアントが使用するビット数です。 たとえば、i8は-(2 ^ 7)から2 ^ 7 -1_までの数値を格納できます。ここでは、_n_を8に置き換えました。

各符号なしバリアントには、_0_から_2 ^(n-1)_までの数値を格納できます。 たとえば、u8は_0_から_2 ^ 7_の数値を保存できます。これは0から255に相当します。

整数オーバーフロー

整数変数に割り当てられた値がデータ型のRust定義範囲を超えると、整数オーバーフローが発生します。 例でこれを理解しましょう-

fn main() {
   let age:u8 = 255;

  //0 to 255 only allowed for u8
   let weight:u8 = 256;  //overflow value is 0
   let height:u8 = 257;  //overflow value is 1
   let score:u8 = 258;   //overflow value is 2

   println!("age is {} ",age);
   println!("weight is {}",weight);
   println!("height is {}",height);
   println!("score is {}",score);
}

符号なしu8変数の有効範囲は0〜255です。 上記の例では、変数には255より大きい値が割り当てられています(Rustの整数変数の上限)。 実行時に、上記のコードは、重量、身長、スコア変数のu8_* の範囲外の警告-* _warning-リテラルを返します。 255の後のオーバーフロー値は、0、1、2などから始まります。 警告なしの最終出力は以下のとおりです-

age is 255
weight is 0
height is 1
score is 2

浮く

Rustのフロートデータ型は、 f32 および f64 に分類できます。 f32型は単精度の浮動小数点数で、f64は倍精度です。 デフォルトのタイプはf64です。 floatデータ型の詳細を理解するには、次の例を検討してください。

fn main() {
   let result = 10.00;       //f64 by default
   let interest:f32 = 8.35;
   let cost:f64 = 15000.600; //double precision

   println!("result value is {}",result);
   println!("interest is {}",interest);
   println!("cost is {}",cost);
}

出力は以下のようになります-

interest is 8.35
cost is 15000.6

自動型鋳造

Rustでは自動型キャストは許可されていません。 次のコードスニペットを考えてください。 整数値がfloat変数 interest に割り当てられます。

fn main() {
   let interest:f32 = 8;  //integer assigned to float variable
   println!("interest is {}",interest);
}

以下に示すように、コンパイラは mismatched types error をスローします。

error[E0308]: mismatched types
   --> main.rs:2:22
   |
 2 | let interest:f32=8;
   |    ^ expected f32, found integral variable
   |
   = note: expected type `f32`
      found type `{integer}`
error: aborting due to previous error(s)

番号区切り

大きな数字を読みやすくするために、視覚的な区切り文字_アンダースコアを使用して数字を区切ることができます。 つまり、50,000は50_000と記述できます。 これを以下の例に示します。

fn main() {
   let float_with_separator = 11_000.555_001;
   println!("float value {}",float_with_separator);

   let int_with_separator = 50_000;
   println!("int value {}",int_with_separator);
}

出力は以下のとおりです-

float value 11000.555001
int value 50000

ブール値

ブール型には、_true_または_false_の2つの値があります。 ブール変数を宣言するには、 bool キーワードを使用します。

fn main() {
   let isfun:bool = true;
   println!("Is Rust Programming Fun ? {}",isfun);
}

上記のコードの出力は次のようになります-

Is Rust Programming Fun ? true

キャラクター

Rustの文字データ型は、数字、アルファベット、ユニコード、特殊文字をサポートしています。 char キーワードを使用して、文字データ型の変数を宣言します。 Rustのchar型はUnicodeスカラー値を表します。つまり、ASCII以外の多くのことを表すことができます。 Unicodeスカラー値の範囲は、 U + 0000 から U + D7FF および U + E000 から U + 10FFFF です。

Characterデータ型についてさらに理解するための例を考えてみましょう。

fn main() {
   let special_character = '@';//default
   let alphabet:char = 'A';
   let emoji:char = '😁';

   println!("special character is {}",special_character);
   println!("alphabet is {}",alphabet);
   println!("emoji is {}",emoji);
}

上記のコードの出力は次のようになります-

special character is @
alphabet is A
emoji is 😁