コンテンツにスキップ

関数

名前付き関数(ブロック本体)

Section titled “名前付き関数(ブロック本体)”
fn greet name
console.log[name]

コンパイル結果:

function greet(name) {
console.log(name);
}

to 形式はワンライナーの関数本体を作成します。名前付き関数には暗黙のreturnはありません — 明示的にreturnするには to return を使用してください。

fn greet name to console.log[name]
function greet(name) { console.log(name); }
fn double x to return x mul 2
function double(x) { return x * 2; }

パラメータを省略するだけです:

fn say-hello
console.log[///Hello!///]
function say_hello() {
console.log("Hello!");
}

式本体の場合:

fn say-hello to console.log[///Hello!///]
function say_hello() { console.log("Hello!"); }

; でパラメータを区切ります:

fn add a; b
return a add b
function add(a, b) {
return a + b;
}
const double be fn x to x mul 2
const double = (x) => x * 2;
const get-time be fn to Date.now[]
const get_time = () => Date.now();
const process be fn data
console.log[data]
return data
const process = (data) => {
console.log(data);
return data;
};
async fn fetch-data url
const res be await fetch[url]
return res
async function fetch_data(url) {
const res = await fetch(url);
return res;
}

非同期無名関数は通常の無名関数と同様に async プレフィックスを付けます:

const handler be async fn event to await process[event]
const fetcher be async fn url
const res be await fetch[url]
return await res.json[]
const handler = async (event) => await process(event);
const fetcher = async (url) => {
const res = await fetch(url);
return await res.json();
};

複数行括弧のサポートにより、無名関数をメソッドチェーンの引数として渡せます:

promise.then[fn result to console.log[result]].catch[fn err to console.error[err]]

複数行形式:

fetch[url].then[
fn response
return response.json[]
].then[
fn data
console.log[data]
].catch[
fn err
console.error[err]
]
fetch(url).then((response) => {
return response.json();
}).then((data) => {
console.log(data);
}).catch((err) => {
console.error(err);
});

() の代わりに [] を使います:

greet[///world///]
add[1; 2]
console.log[///hello///]
greet("world");
add(1, 2);
console.log("hello");

JavaScriptでの a(b(c), d) のようなネストされた呼び出しでは、[] が配列と呼び出しの両方に使われるため、; で引数を区切ります:

-- JS: a(b(c), d)
a[b[c]; d]
-- JS: a(b, c(d, e))
a[b; c[d; e]]
-- JS: console.log(Math.max(1, 2))
console.log[Math.max[1; 2]]
-- JS: fn(a(1, 2), b(3, 4), c)
fn[a[1; 2]; b[3; 4]; c]
-- JS: outer(inner1(x), inner2(y, z))
outer[inner1[x]; inner2[y; z]]
a(b(c), d);
a(b, c(d, e));
console.log(Math.max(1, 2));
fn(a(1, 2), b(3, 4), c);
outer(inner1(x), inner2(y, z));

型アノテーション(消去される)

Section titled “型アノテーション(消去される)”
fn add a of Number; b of Number gives Number to a add b

ofgives による型アノテーションはJavaScript出力では消去されます。

fn get-value
return 42