関数
Ceruneではfnで関数を定義します。引数と戻り値の型を明示し、関数名で呼び出します。
関数の定義と呼び出し
Section titled “関数の定義と呼び出し”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関数を途中で終了 |
値を返す関数では、すべての実行経路で値を返す必要があります。最後に式を書くだけでは戻り値になりません。
戻り値がない関数
Section titled “戻り値がない関数”fn show(value: i64) -> void { print(value);}
show(42);void関数は末尾まで実行するか、return;で終了できます。void関数は呼び出し文として使い、値を返す関数の呼び出しは式として使います。
引数と値の受け渡し
Section titled “引数と値の受け渡し”引数の式は左から順に、一度ずつ評価されます。型が異なる引数を暗黙に変換しません。
配列や名前付き積型は値として渡します。関数内で受け取った値を変更しても、呼び出し元の値は変わりません。引数の個数に、言語仕様上の固定された上限はありません。
引数と関数内の束縛は、その関数内でのみ参照できます。関数からトップレベルの実行時の束縛を直接読むことはできません。
プログラムの実行開始点
Section titled “プログラムの実行開始点”Ceruneは、トップレベルの実行文を使う形式と、fn main() -> voidを明示する形式に対応します。
fn main() -> void { print(42);}トップレベルの実行文と明示的なmainは併用できません。 mainは引数を受け取りません。
型・配列長を引数にする関数
Section titled “型・配列長を引数にする関数”型パラメーターTと、固定長配列の長さパラメーターconst N: i64を指定できます。
fn first<T, const N: i64>(values: [T; N]) -> T { return values[0];}
print(first::<string, 2>(["先頭", "次"]));::<...>に型と長さを宣言順で明示します。長さは正の整数リテラル、整数定数名、外側の長さパラメーターを使えます。
現在の制限: 型引数の推論、trait、汎用の型定義、再帰呼び出しは未対応です。ジェネリック関数の本体は使用した具体型ごとに検査されるため、未使用の具体化まで検査されるとは限りません。
モジュールと公開範囲
Section titled “モジュールと公開範囲”他のモジュールから関数を利用する場合は、pub fnで公開し、importした名前空間を通して呼び出します。詳しい構文は言語リファレンスにあります。
サンプルと一次資料
Section titled “サンプルと一次資料”以下のコード例はCerune本体で管理されています。
- functions.ceru — 引数、戻り値、
void - function_arguments.ceru — 引数の評価順と値渡し
- function_values.ceru — 配列・積型の引数と戻り値
- generic_functions.ceru — 型・長さパラメーター
- ir_execution.ceru — 明示的な
main
このページは仕様の要約です。評価順、型検査、関数の呼び出し規則については言語リファレンス(一次資料)と関数の設計を参照してください。