コンテンツにスキップ

関数

Ceruneではfnで関数を定義します。引数と戻り値の型を明示し、関数名で呼び出します。

fn add(left: i64, right: i64) -> i64 {
return left + right;
}
result: i64 = add(20, 22);
print(result); // 42
構文 内容
fn name(parameters) -> T { ... } 戻り値の型がTの関数を定義
name(arguments) 関数を呼び出す
return value; 値を返して関数を終了
-> void 値を返さない関数の戻り値型
return; void関数を途中で終了

値を返す関数では、すべての実行経路で値を返す必要があります。最後に式を書くだけでは戻り値になりません。

fn show(value: i64) -> void {
print(value);
}
show(42);

void関数は末尾まで実行するか、return;で終了できます。void関数は呼び出し文として使い、値を返す関数の呼び出しは式として使います。

引数の式は左から順に、一度ずつ評価されます。型が異なる引数を暗黙に変換しません。

配列や名前付き積型は値として渡します。関数内で受け取った値を変更しても、呼び出し元の値は変わりません。引数の個数に、言語仕様上の固定された上限はありません。

引数と関数内の束縛は、その関数内でのみ参照できます。関数からトップレベルの実行時の束縛を直接読むことはできません。

Ceruneは、トップレベルの実行文を使う形式と、fn main() -> voidを明示する形式に対応します。

fn main() -> void {
print(42);
}

トップレベルの実行文と明示的なmainは併用できません。 mainは引数を受け取りません。

型パラメーターTと、固定長配列の長さパラメーターconst N: i64を指定できます。

fn first<T, const N: i64>(values: [T; N]) -> T {
return values[0];
}
print(first::<string, 2>(["先頭", "次"]));

::<...>に型と長さを宣言順で明示します。長さは正の整数リテラル、整数定数名、外側の長さパラメーターを使えます。

現在の制限: 型引数の推論、trait、汎用の型定義、再帰呼び出しは未対応です。ジェネリック関数の本体は使用した具体型ごとに検査されるため、未使用の具体化まで検査されるとは限りません。

他のモジュールから関数を利用する場合は、pub fnで公開し、importした名前空間を通して呼び出します。詳しい構文は言語リファレンスにあります。

以下のコード例はCerune本体で管理されています。

このページは仕様の要約です。評価順、型検査、関数の呼び出し規則については言語リファレンス(一次資料)と関数の設計を参照してください。