データ型

Adelieでは全てのプリミティブ型を.Net型に置き換えることができます。

値型

整数型

Adelie範囲サイズ.NET型
i32-2,147,483,648 ~ 2,147,483,647符号付き32ビット整数System.Int32
i64-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807符号付き64ビット整数System.Int64

整数型は10進数での指定ができます。
接尾辞を付けない場合の規定はi32になります。

let a: i32 = 42;

浮動小数点数型

Adelieおおよその範囲有効桁数サイズ.NET型
f32±1.5 x 10−45 から ±3.4 x 1038~6-9 桁4 バイトSystem.Single

接尾辞を付けない場合の規定はf64になります。

let a: f32 = 3.14f32;
let b = 1.0;

論理値型

Adelie.NET型
boolSystem.Boolean

trueまたはfalseを指定することができます。

let a: bool = true;
let a: bool = false;

文字型

Adelie範囲サイズ.NET型
charU+0000 ~ U+FFFF16ビットSystem.Char

char型は内部でUnicode UTF-16文字を表します。

'(シングルクォート)」で囲った一文字を指定できます。

let a: char = 'a';
let a: char = '☺';

構造体型

Adelie.NET型
structSystem.ValueType
// 構造体定義
struct Rectangle {
    width: i32,
    height: i32,
}
// メソッド定義
impl Rectangle {
    fn new(w: i32, h: i32) -> Rectangle {
        Rectangle {
            w,
            h,
        }
    }
    fn area(&self) -> i32 {
        self.width * self.height
    }
}
fn main() {
    // インスタンス化
    let rect1: Rectangle = Rectangle::new(30, 50);
    assert_eq!(rect1.area(), 150);
}

列挙型

Adelie.NET型
enumSystem.Enum

内部では「0」からの連番を振られた名前付き定数になります。

enum Color {
    Red,
    Green,
    Blue,
}
fn main() {
    let blue: Color = Color::Blue;
    assert_eq!(blue as i32, 2);
}

参照型

文字列型

Adelie.NET型
stringSystem.String

Adelieではstring型はUTF-16のシーケンスを表します。

let a: string = "foo";

Box型

Adelie.NET型
BoxSystem.Object
let a: Box<i32> = Box::new(42);
assert_eq!(*a, 42);

Vec型

Adelie.NET型
VecSystem.Collections.Generic.List
let mut a: Vec<i32> = Vec::new();
a.push(42);
assert_eq!(a[0], 42);

クラス型

Adelie.NET型
classSystem.Object

後述するexternブロック内でのみ宣言が可能です。

extern {
    class Foo {
        bar: i32
    }
}