func定義と呼び出し
基本
func キーワードで関数を定義します。
func greet(name) {
return "こんにちは、" + name + "。"
}
OnBoot => {
湊: ${greet("湊")}
}
引数なし
func random_greeting() {
if (rand() % 2 == 0) {
return "こんにちは。"
}
return "やあ。"
}
OnBoot => {
湊: ${random_greeting()}
}
複数の引数
func add(a, b) {
return a + b
}
OnBoot => {
湊: ${add(3, 5)}です。
}
グローバル変数の操作
関数の中から global でsaveを操作できます。
func increment(key) {
global save[key] += 1
}
OnBoot => {
increment("訪問回数")
湊: ${save.訪問回数}回目です。
}
定義場所
関数は、基本的にトークの外(トップレベル)に定義します。
トップレベルの関数は、読み込み時に登録され、どのトークからも呼べます。
include で別ファイルに分けることもできます。
トークの中で定義する
func は、トークやブロックの中でも書けます。
OnBoot => {
func hi(n) {
return "hi " + n
}
湊: ${hi("a")}
}
ただし、トークの中の func は、その行が実行されたときに登録されます。
また、一度登録された関数は、そのトークの中だけでなく、以降は他のトークからも呼べるようになります(ゴーストを終了するまで残ります)。
- 定義の行が実行される前に呼ぶと、その関数はまだ存在しないので、呼び出しの結果は空になります。
- 同じ名前の関数を別のトークで定義すると、あとから実行されたほうで置き換わります。
- 呼ぶ側のトークで名前が見つからない場合の確認には、
talk_exists("名前")が使えます。
トークの中だけで使うつもりの関数が、他のトークから見えてしまうことがあるので、特別な理由がなければトップレベルに定義してください。
再帰
再帰呼び出し(関数が関数を呼ぶ入れ子)は、深さ約100が上限です(正確には、最初の呼び出しから数えて101段目までです)。 上限を超えた呼び出しは実行されず、空の値になります。