変数と型
バインディング(let/var)、型注釈、主要な組み込み型。
変数と型
Sounio は静的型付けで、ほとんどのローカルバインディングは型推論できます。
変数宣言
不変(let)
デフォルトでは変数は不変です:
let x = 42 // Type inferred as i32
let name = "Alice" // Type inferred as string
let pi = 3.14159 // Type inferred as f64
可変(var)
可変にしたい場合は var を使います:
var counter = 0
counter = counter + 1 // OK
let fixed = 10
fixed = 20 // Error: cannot assign to immutable variable
型注釈
型を明示できます:
let x: i32 = 42
let ratio: f64 = 0.5
let flag: bool = true
let message: string = "Hello"
プリミティブ型
| 型 | 説明 | 例 |
|---|---|---|
i8, i16, i32, i64 | 符号付き整数 | let x: i32 = -42 |
u8, u16, u32, u64 | 符号なし整数 | let y: u32 = 42 |
f32, f64 | 浮動小数点 | let pi: f64 = 3.14 |
bool | 真偽値 | let flag: bool = true |
char | Unicode 文字 | let c: char = 'A' |
string / String | 文字列 | let s = "hello" |
str | 借用された文字列スライス | let s: &str = "hello" |
複合型
タプル
let point = (10, 20)
let first = point.0 // 10
let second = point.1 // 20
配列
let numbers: [i32; 5] = [1, 2, 3, 4, 5]
let first = numbers[0] // 1
ベクタ(Vec<T>)
let items: Vec<i32> = [1, 2, 3, 4]
for x in items {
// ...
}
型推論
Sounio は文脈から型を推論します:
let values = [1, 2, 3] // Array literal
let vec_values: Vec<i32> = values
仕様メモ: 単位(units)はパースできます(例:
unit kg; unit g = 0.001 * kg; unit mg = 0.001 * g;)。ただし完全な単位チェックは、コンパイラのモード/フラグによってはまだ統合途中です。
エピステミック型(Knowledge<T>)
不確かさを伴う値:
let k = Knowledge { value: 42.0 }
let x: f64 = k.unwrap("accepted for demo")
詳しくは Knowledge Types を参照してください。