文字列展開

セリフや文字列の中で変数・式・関数の結果を展開できます。

基本

${} の中に変数名や式を書きます。

OnBoot => {
    global save.訪問回数 += 1
    湊: ${save.訪問回数}回目の起動です。
}

式の展開

計算式をそのまま書けます。

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

関数の展開

ビルトイン関数や自分で定義した関数も展開できます。

OnBoot => {
    湊: 「こんにちは」は${len("こんにちは")}文字です。
}

null合体演算子

?? を使うと値が null のときの代替値を指定できます。

OnBoot => {
    湊: ${save.名前 ?? "名無し"}さん、こんにちは。
}

ネストしたアクセス

マップや配列のネストもそのまま展開できます。

OnBoot => {
    let data = {"name": "湊", "age": 17}
    湊: 名前は${data["name"]}、年齢は${data["age"]}です。
}

「${}」なしの変数参照に注意

セリフ本文の先頭、または**${} の直後**では、${} を付けなくても save.訪問回数 のような「名前.名前」の形が変数参照として読み取られます。 ここでいう「名前」は、英数字・_・日本語の文字(「、」「。」などの句読点や記号を含む)が 途切れず続いたものです。

このため、セリフの先頭から半角の .(小数点やバージョン番号など)まで、 スペースや半角記号を挟まずに文字が続いていると、その全体が変数参照として扱われます。 そんな変数は存在しないので値は空になり、その部分の文が消えます。

OnBoot => {
    湊: 体重は57.8kgです。
    // 「体重は57」と「8kgです」が「.」でつながった変数参照とみなされ、
    // 「体重は57.8kgです」が消えて「。」だけが残る
}

. の前に半角スペースや半角記号があれば変数参照にはなりません。 また、本文の途中(先頭でも ${} の直後でもない位置)に書いた 57.8 は、そのまま表示されます。

回避するには、${} の中に文字列として書きます。

OnBoot => {
    湊: ${"体重は57.8kgです。"}
    湊: 体重は${57.8}kgです。
}

${} の直後も同じ規則が適用されます(${name}abc.def の「abc.def」が変数参照になります)。 小数点などを含む文章を書くときは、迷ったら ${"..."} を使ってください。

シングルクォート文字列との違い

シングルクォート '...' の中では展開されません。 展開が必要な場合はダブルクォート "..." を使います。

let a = '${save.訪問回数}'  // 展開されない、文字列そのまま
let b = "${save.訪問回数}"  // 展開される