CNLの記法#
現在のCNLは、型付き関数と変更できないローカル値を基本にしています。インデントを自由に整えても意味は変わりません。括弧と文末の;は必要です。
関数#
function adjust(value: Float, offset: Float): Float {
const shifted = value + offset;
return shifted;
}
functionの後ろに関数名、()の中に入力、)の後ろに戻り値の型を書きます。本文は{}で囲みます。入力と戻り値には型が必要です。ローカル値の型は式から決まるので、現在はconst shifted: Float = ...のような型注釈は使いません。
本文にはconst 名前 = 式;を並べ、最後に一つのreturn 式;を書きます。再代入、同じ名前の二重定義、returnの後ろの文はエラーです。一般のif・for・whileはまだ使えません。
名前とコメント#
識別子には英字・数字・_を使い、先頭は英字か_にします。標準関数にはstd.filter.gaussian_blur_autoのような、.で区切った名前もあります。大文字と小文字は区別します。日本語はコメント、String、画面上の表示名に使えます。
// 入力を少し明るくする
function main(value: Float): Float {
/* コメント内の { } は構文に影響しません。 */
return value + 0.1;
}
//は行末まで、/* ... */は複数行のコメントです。ブロックコメントは入れ子にできません。閉じ忘れはエラーです。KernelやGridの係数配列など、専用のデータ記法の内部はそれぞれの規則に従います。
function、const、return、true、false、fn、let、if、else、for、while、break、continue、import、export、operatorは名前に使えません。operator.で始まる名前も演算子用です。予約されていても、未実装の構文が使えるわけではありません。
リテラル#
| 書き方 | 値 |
|---|---|
1、0.25 |
Float。小数点がなくてもFloatです |
true、false |
Boolean |
literal(Integer, 1) |
Integer |
literal(String, "こんにちは") |
String |
literal(Color, 1, 0.5, 0, 1) |
Color。RGBAの順です |
function greeting(): String {
return literal(String, "こんにちは");
}
現在、単独の"..."はファイルパスなどに使うbyte Bufferです。Stringにはliteral(String, "...")を使います。Stringとbyte Bufferは別のデータです。型を変えたい場合も、戻り値の注釈だけで暗黙に変換されることはありません。
以前のfn 名前(...) -> 型、let 名前 = ...;も同じ意味の別記法として受け付けます。NodeからCodeを生成するときはfunction・:・constを使います。