演算子リファレンス
NagiScript の演算子全体を解説します。
このページは現行コンパイラー v0.2.0
の正仕様に合わせてあります。論理演算は
and /
or / not を使用します。&& / || /
! は使えません。文字列の
+
連結、?(エラー伝播)は未実装・使えません。
算術演算子
| 演算子 | 説明 | 例 | 結果 |
|---|---|---|---|
+ |
加算 | 5 + 3 |
8 |
- |
減算 | 5 - 3 |
2 |
* |
乗算 | 5 * 3 |
15 |
/ |
除算 | 5 / 3 |
1 (整数除算) |
% |
剰余 | 5 % 3 |
2 |
浮動小数点の除算
val a: f64 = 5.0
val b: f64 = 3.0
val result = a / b // 1.66666...
算術演算子(+ - *
/
%)は数値に対してのみ動作します。文字列の
+ 連結は使えず、"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 |
論理演算には and /
or /
not を使用します。&& / || /
! は使えません。
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 |
ポインタは *T 形式、アドレス取得は
&x as *T、参照外しは
unsafe { *ptr } を使います。.offset(n)
や
ptr->(ポインタ経由のメンバアクセス)は未対応で、*ptr
と整数演算で代替してください。
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" |
文字列の + 連結は使えません。"Hello" + " World"
はコンパイルエラーになります。文字列は print /
println
でそのまま表示し、複数の値を並べたい場合は個別に
println を呼び出してください。
println("Hello")
println(" World")
リスト演算子
| 演算子 | 説明 | 例 |
|---|---|---|
[] |
インデックスアクセス | list[0] |
+ |
リスト結合 | list1 + list2 |
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
型も存在しません。
