演算子リファレンス

NagiScript の演算子全体を解説します。

現行仕様(v0.2.0)

このページは現行コンパイラー v0.2.0 の正仕様に合わせてあります。論理演算は and / or / not を使用します。&& / || / ! は使えません。文字列の + 連結、?(エラー伝播)は未実装・使えません。


算術演算子

演算子 説明 例 結果
+ 加算 5 + 3 8
- 減算 5 - 3 2
* 乗算 5 * 3 15
/ 除算 5 / 3 1 (整数除算)
% 剰余 5 % 3 2

浮動小数点の除算

main.ngs
val a: f64 = 5.0
val b: f64 = 3.0
val result = a / b  // 1.66666...
現行仕様(v0.2.0)

算術演算子(+ - * / %)は数値に対してのみ動作します。文字列の + 連結は使えず、"Hello" + " World" はコンパイルエラーになります。


比較演算子

演算子 説明 例 結果
== 等しい 5 == 5 true
!= 等しくない 5 != 3 true
< 小さい 5 < 3 false
> 大きい 5 > 3 true
<= 以下 5 <= 5 true
>= 以上 5 >= 3 true

論理演算子

演算子 説明 例 結果
and 論理AND true and false false
or 論理OR true or false true
not 論理NOT not true false
現行仕様(v0.2.0)

論理演算には and / or / not を使用します。&& / || / ! は使えません。

main.ngs
val a = true and (5 > 3)
val b = not false
println(a)
println(b)

代入演算子

演算子 説明 例
= 代入 x = 5
+= 加算代入 x += 5
-= 減算代入 x -= 5
*= 乗算代入 x *= 5
/= 除算代入 x /= 5
%= 剰余代入 x %= 5

ポインタ演算子

演算子 説明 例
& アドレス取得 val ptr = &x as *i32
* 参照外し(unsafe ブロック内) unsafe { *ptr }
-> 戻り値型の記法(関数定義のみ) fn f() -> i32
現行仕様(v0.2.0)

ポインタは *T 形式、アドレス取得は &x as *T、参照外しは unsafe { *ptr } を使います。.offset(n) や ptr->(ポインタ経由のメンバアクセス)は未対応で、*ptr と整数演算で代替してください。

main.ngs
fn read(ptr: *i32) -> i32 {
    unsafe { return *ptr }
}
var x = 42
val p = &x as *i32
println(read(p))

型演算子

演算子 説明 例
as 型変換 val y = x as f64

エラー伝播演算子

演算子 説明 例
? エラー伝播 val n = parse_int(s)?
ロードマップ(未実装)

?(エラー伝播)演算子は未実装です。Result 型も組み込みでは存在せず、エラーハンドリングは enum で自作して if 分岐で行ってください。


演算子の優先順位

優先順位 演算子 説明
1 (最高) () 括弧
2 ! 否定
3 *, /, % 乗算、除算、剰余
4 +, - 加算、減算
5 <, >, <=, >= 比較
6 ==, != 等値比較
7 and 論理AND
8 or 論理OR
9 = 代入
補足

loop は存在せず、void 型もありません。戻りのない関数は -> を書かず、無限ループは while true { ... } を使います。


文字列演算子

演算子 説明 例
+ 文字列連結 "Hello" + " World"
現行仕様(v0.2.0)

文字列の + 連結は使えません。"Hello" + " World" はコンパイルエラーになります。文字列は print / println でそのまま表示し、複数の値を並べたい場合は個別に println を呼び出してください。

main.ngs
println("Hello")
println(" World")

リスト演算子

演算子 説明 例
[] インデックスアクセス list[0]
+ リスト結合 list1 + list2
現行仕様(v0.2.0)

List<T> は LLVM コード生成で zext i64 to i64 エラーになりリンクに失敗する既知バグがあります。当面は構造体 + 値渡しを推奨します。インデックスアクセスの [] 演算子は、固定配列 [T; N] に対して安全に使えます(要素数は a.len() / len(a) で取得可能。change.md 2026-08 で配列の .len() メソッドが追加されました)。


その他(未実装の演算子・型)

ロードマップ(未実装)

タプル((1, 2, 3)、t.0)は未実装/未検証です。関数式(fn(x: i32) i32 { ... })や関数型フィールド(handler: fn(Request) Response)は現行では不安定で、ルーターは handler_id: i32 と if 分岐で実装してください。void 型も存在しません。