コンテンツにスキップ

型とリテラル

型 値の範囲・役割 変数・引数に使えるか
i32 −2,147,483,648 ~ 2,147,483,647 使える
i64 −9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 使える
bool true または false 使える
() 値を返さないブロック・関数の結果(unit) 使えない

整数は固定幅の符号付き整数です。bool と整数は別の型で、条件式には bool が必要です。if 1 { ... } のように整数を真偽値として扱うことはできません。

整数と真偽値は、代入や引数の受け渡しでコピーされます。

10進数で書き、桁区切りに _ を使えます。型接尾辞は i32 と i64 です。

small = 42; // 型を決める文脈がなければ i32
large = 3_000_000_000_i64;
also_large = 3000000000i64;
lowest: i32 = -2_147_483_648;
print small, large, also_large, lowest;

0xff、0b1010、浮動小数点リテラルは使えません。型の範囲を超えた整数リテラルはコンパイル時にエラーになります。

型注釈、関数の引数型、演算の相手側などから、接尾辞のないリテラルの型を決めます。文脈がなければ i32 です。

fn twice(value: i64) -> i64 {
value * 2
}
total: i64 = 1;
print total + 2, twice(3);

この例の 1、2、3 は、それぞれの文脈から i64 になります。ただし、推論は局所的です。後続の文から前の変数定義の型を変更することはありません。

x = 1; // この時点で i32
y: i64 = x; // エラー: x を暗黙に i64 へ変換しない

複雑な右辺の内部まで先に調べて型を推論できない場合があります。たとえば次は、左の 1 が先に i32 と決まるためエラーです。

print 1 + { y: i64 = 2; y };

型接尾辞や変数の型注釈で意図を明示してください。

print 1_i64 + { y: i64 = 2; y };

i32 と i64 の暗黙変換、整数と bool の変換、as による明示的キャストは使えません。使いたい幅で最初から定義してください。

二項演算の両辺は原則として同じ型が必要です。例外はシフトです。i32 << i64 のように異なる整数幅を組み合わせられ、結果は左辺の型になります。演算子で詳しく説明します。

実装の参照先: 型定義、型推論・型検査。