let(ローカル変数)

let はトークの中だけで使えるローカル変数です。 宣言したブロック({ })を出るか、トークの実行が終わると消えます。

let はトークや関数の外(ファイルのトップレベル)には書けません。書くと「let はトークや関数の中でしか使えません」というエラーになります。 複数のトークで同じ値を使いたいときは、トップレベルに global を書いてください。

global 一覧 = {"ふれいむ": ["フレイム", "炎を放つ魔法。"]}

OnBoot => {
    湊: ${一覧["ふれいむ"][0]}
}

基本的な書き方

OnBoot => {
    let name = "湊"
    湊: 私の名前は${name}です。
}

値の種類

数値・文字列・bool・配列・マップが使えます。

OnBoot => {
    let count = 0
    let name = "湊"
    let flag = true
    let items = ["あ", "い", "う"]
    let data = {"key": "value"}
}

計算

OnBoot => {
    let a = 10
    let b = 3
    let sum = a + b
    湊: ${a}と${b}を足すと${sum}です。
}

再代入

let で宣言した変数は後から値を変えられます。

OnBoot => {
    let count = 0
    count += 1
    count += 1
    湊: ${count}回カウントしました。
}

添字を使った代入

配列やマップの要素は、添字を使って書き換えられます。添字には変数や式も書けます。

OnBoot => {
    let map = [[0, 0, 0], [0, 0, 0]]
    let y = 1
    let x = 2
    map[y][x] = 1
    map[y - 1][x] += 5
    湊: ${map[1][2]} ${map[0][2]}
}

出力は 1 5 になります。

  • 配列の範囲外(長さ以上、-1、1.5 など)の添字への代入は無視され、「配列の添字 N は範囲外です(長さ M)」という warning が出ます。配列は代入では伸びません。
  • 未定義の変数への添字代入は、配列ではなくマップになります。 m[y][x] = 1 と書くと、m は {"1": {"2": 1}} というマップになります。配列として使いたいときは、先に let m = [[0, 0, 0], [0, 0, 0]] のように初期化してください。

let の有効範囲

let の変数は、宣言したブロック({ })の中だけで有効です。 if、for、foreach、while、match の中で let すると、そのブロックを出たときに消えます。

一方、let なしの代入(c = 5)は、外側に同名のローカル変数があれば、その変数を更新します。

OnBoot => {
    let a = 1
    let c = 1
    if (true) {
        let a = 2
        c = 5
        let b = 3
    }
    湊: a=${a} b=${b} c=${c}
}

出力は a=1 b= c=5 になります。

  • let a = 2 は、if の中に新しい a を作ります。外の a は 1 のままです。
  • c = 5 は、外の c を更新します。
  • b は if の中で消えるので、外では空です。

let なしの代入は「起動中グローバル」になる

let を付けずに x = 5 と書いたとき、その名前のローカル変数がなければ、起動中だけ有効なグローバル変数が作られます。 他のトークからも見えますが、save.json には保存されず、ゴーストを終了すると消えます。

OnBoot => {
    counter = 5
}

OnClose => {
    湊: counter=${counter}
}

OnBoot で作った counter が、別のトーク OnClose から見えます。

トークの中だけで使う一時的な値は、名前がぶつかって他のトークに影響しないよう、必ず let で宣言してください。 起動中だけ共有したい値は global work.x = 1 のように書きます(名前が work で始まる、というだけの約束です)。 再起動後も残したい値は global save.x に置きます(global / save(永続化))。

これらの違いは、里々やYAYAから移る場合に特に問題になります。詳しくは5. 変数を参照してください。