1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

(DAY6) 俺と学ぶRust言語~変数の型~

Posted at

今日の内容

  • 変数型
  • 型推論
  • 型指定

はじめに

前回はフィボナッチ数列を通して変数定義について学びました。今回は、Rustでの型について学びます。

Rustは静的型付き言語です。とはいえ、今まで変数定義に型指定はしてきませんでした。なぜでしょうか?それは、Rustには 型推論 が搭載されているからです。

型推論とは

型推論とは、ソースコード内の変数や式の型を自動的に推論してくれる機能。

今まで変数を定義するときは、

let 変数名 = ;

のようにしてきました。ここで、C言語での変数定義を思い出してみましょう。

int a = 1;
float b = 1.0;
char c = 'c';

C言語では、変数を定義するときに、その変数の型を指定する必要がありました。しかし、以前にRustは型に厳格であるといいました。

ここで疑問に思うのは、なぜ型に厳格なのに、C言語のように型を明確に示す必要がないのか、ということです。その理由は、見比べてみたらわかりやすいですが、可読性によるものです。

let a = 1;
let b = 1.0;
let c = 'c';
let d = "RUST VS C";
int a = 1;
float b = 1.0;
char c = 'c';
char d[10] = "RUST VS C\0";

確かにRustでの変数定義のほうが揃っていて見やすいですね。しかし、本当にそれだけが理由でしょうか?実は、型推論のほうが、むしろ安全性が高いのです。型推論では、推論に失敗するとその時点でエラーを出してくれるので、エラーの早期発見ができるのです。

型指定の必要性

ここまで、型推論のすごさを感じてきました。では、型指定は必要あるのでしょうか?
実は、型推論が有効なのは「関数の内側」 だけなのです。そのため、関数の定義や、より発展的なデータ型を使ったりする場合には、型の定義が必須になります。

数値型

Rustにおける数値には、大きく分けて「符号付整数」、「符号なし整数」、「浮動小数点数」の三種類になります。

符号付整数

説明
i8 8ビット整数(-128から127)
i16 16ビット整数(-32768から32767)
i32 32ビット整数(-2147483648から2147483647)
i64 64ビット整数(-9223372036854775808から9223372036854775807)
i128 128ビット整数(-2¹²⁷から2¹²⁷-1)
isize ポインタサイズ整数型(コンピュータ依存。64bitとか32bitとか。)

符号なし整数

説明
u8 8ビット整数(0から255)
u16 16ビット整数(0から65535)
u32 32ビット整数(0から4294967295)
u64 64ビット整数(0から18446744073709551615)
u128 128ビット整数(0から2¹²⁸-1)
usize ポインタサイズ符号なし整数型(コンピュータ依存。64bitとか32bitとか。)

浮動小数点数型

説明
f32 32ビット浮動小数点数(実数)
f64 64ビット浮動小数点数(実数)

型の範囲を知る方法

型の範囲は「i8::MIN」や「i8::MAX」で取得できます。
つまり、次のようにすることで、わざわざ検索しなくても確認することができます。

fn main(){
    println!("-------- 符号なし整数 --------");
    println!("i8:   {}~{}", i8::MIN, i8::MAX);
    println!("i16:  {}~{}", i16::MIN, i16::MAX);
    println!("i32:  {}~{}", i32::MIN, i32::MAX);
    println!("i64:  {}~{}", i64::MIN, i64::MAX);
    println!("i128: {}~{}", i128::MIN, i128::MAX);

    println!("-------- 符号付き整数 --------");
    println!("u8:   {}~{}", u8::MIN, u8::MAX);
    println!("u16:  {}~{}", u16::MIN, u16::MAX);
    println!("u32:  {}~{}", u32::MIN, u32::MAX);
    println!("u64:  {}~{}", u64::MIN, u64::MAX);
    println!("u128: {}~{}", u128::MIN, u128::MAX);
}
/******** 出力結果 *******
-------- 符号なし整数 --------
i8:   -128~127
i16:  -32768~32767
i32:  -2147483648~2147483647
i64:  -9223372036854775808~9223372036854775807
i128: -170141183460469231731687303715884105728~170141183460469231731687303715884105727
-------- 符号付き整数 --------
u8:   0~255
u16:  0~65535
u32:  0~4294967295
u64:  0~18446744073709551615
u128: 0~340282366920938463463374607431768211455
*************************/

型指定

変数宣言の際、型推論を使わずに自分で型を指定するには、以下のように記述します。

let 変数名: 型名 = ;

Rustでは、計算をする際に必ず値同士が、同じ型である必要があります。

おわりに

おつかれさまでした。今回は、100DaysOfCode 六日目として、変数の「型」ついて学びました。次回はシーザー暗号を解いて、もう少しRustについて詳しく学んでいきます。
ご精読、ありがとうございました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?