基本概念

変数、型、制御構文の基礎を学びます。


変数と定数

不変変数 (val)

filename.ngs
val x: i32 = 10
val name: str = "NagiScript"
val pi: f64 = 3.14159

val で宣言された変数は再代入できません。

可変変数 (var)

filename.ngs
var counter: i32 = 0
counter = 10  // OK
counter += 1  // OK

型推論

型を省略すると自動推論されます:

filename.ngs
val x = 10        // i32 と推論
val name = "Hello" // str と推論
val flag = true    // bool と推論

基本型

整数型

ビット幅範囲
i88-128 〜 127
i1616-32,768 〜 32,767
i3232約 ±21 億
i6464約 ±922京
u880 〜 255
u16160 〜 65,535
u32320 〜 約42億
u64640 〜 約1844京
filename.ngs
val a: i32 = 42
val b: u8 = 255
val c: i64 = 999999999999

浮動小数点型

filename.ngs
val f1: f32 = 3.14
val f2: f64 = 2.71828182845

文字列型

filename.ngs
val s1: str = "Hello, World!"
val s2 = "型推論でもOK"

// 文字列連結
val greeting = "Hello, " + "World!"

// 文字列の長さ
val len = greeting.len()

真偽値型

filename.ngs
val flag1: bool = true
val flag2 = false

単型 (Unit)

filename.ngs
val nothing: void = void

制御構文

if 式

NagiScript の ifです。戻り値を持ちます。

filename.ngs
val x = 10

val result = if x > 5 {
    "大きい"
} else {
    "小さい"
}
// result = "大きい"

for ループ

for ループは範囲構文のみ対応しています:

filename.ngs
// 基本構文
for i in 0..5 {
    io.println(i)
}
// 出力: 0, 1, 2, 3, 4

// step を指定
for i in 0..10 step 2 {
    io.println(i)
}
// 出力: 0, 2, 4, 6, 8

while ループ

filename.ngs
var i = 0
while i < 5 {
    io.println(i)
    i += 1
}

match 式(パターンマッチング)

filename.ngs
val x = 2

val result = match x {
    1 => "one",
    2 => "two",
    3 => "three",
    _ => "other"
}
// result = "two"

ブロック

filename.ngs
val result = {
    val a = 10
    val b = 20
    a + b
}
// result = 30

型変換

隠示的変換 (i64 → i32)

filename.ngs
val a: i64 = 100
val b: i32 = a  // OK: i64 から i32 へ安全な縮小

型注釈による変換

filename.ngs
val x: i32 = 42
val y: f64 = x  // OK: i32 から f64 への拡張

文字列操作

filename.ngs
val s = "Hello"

// 長さ
val len = s.len()  // 5

// 接続
val greeting = s + ", World!"

// 比較
val eq = s == "Hello"  // true

コメント

filename.ngs
// これは単一行コメント

/*
   これは
   複数行コメント
*/

@doc {
    doc = "この関数は挨拶を表示します"
}
fn greet(name: str) void {
    io.println("Hello, " + name + "!")
}