条件式とは、文字通り分岐や採用のための「条件」のこと。
>ジャンプ先【タブ】(条件式)
*トーク名【タブ】(条件式)
@単語群名【タブ】(条件式)
主にでてくるのはこれ。他にはif関数とかで使う。
この条件式が真である時にそれぞれ有効になる。
逆に偽の時には、無効になる。
トークや単語群で使った時の効果は、特殊記号*の採用条件を参照のこと。
たぶん一般的なプログラミング用語だと「真偽」。
条件式を実行・展開すると、それは必ず「真」か「偽」になる。
これは、文字通り、正しいか間違っているかの二種類を指す。
「YES」か「NO」か、と言い換えてもいい。
何だっていい。
上に書いたように、最終的に0以外の数字なら「真」になるのだから、計算式を使ってもいいわけだ。
文字列判定のような、条件式そのまんまのような関数だってある。
が、だいたいは以下のものをよく使う。
200>100こういうやつね。
演算子一覧にある。一例として取りあげると…
A==B | AとBが等しければ1 |
AとBが等しくなければ0 | |
A!=B | AとBが等しくなければ1 |
AとBが等しければ0 | |
A>B | AがBより大きければ1 |
AがBより小さい、またはAとBが等しければ0 |
そんなこんなで、演算(計算)していくと、最後には1か0になる。
さて、本題。
冒頭で書いたように、里々では様々な箇所に条件式を使うことができる。
>ジャンプ先【タブ】条件式
とあった場合、条件式の計算結果が真(0以外の数値)であればジャンプし、偽(0)であればこの行を無視して次の行へ進む、ということになる。
条件式は最終的に数値であればいいので、極端な例では
*てすと >ジャンプ先0【タブ】0 >ジャンプ先3【タブ】3 >ジャンプ先5
とすると、「ジャンプ先0」は永遠にスルーされ、必ず「ジャンプ先3」へと進む事になる。
もちろん「ジャンプ先5」はまったく触れられもしない。
今度は条件式に比較演算子を使ってみる。
* >おやつタイム【タブ】(現在時)==15 >夜中のおやつ【タブ】(現在時)==3 *おやつタイム :三時だ。おやつにしよう。 *夜中のおやつ :三時だ。おやつにしよう。 :夜中の三時じゃねえか!
(現在時)は現在の時刻に置き換わる情報取得変数。
昼間の三時は15。夜中の三時の時は相方が夜中だ!と怒る。
文字列を比較するとき、数字や算術記号が含まれているとエラーが出る事があるため、compare関数やequal関数を使用した方が安全。
>イベント【タブ】(変数)==比較文字列
これを下の様に書き換える。
>イベント【タブ】(compare,(変数),比較文字列)
ただし、compare関数では半角と全角の文字を同一とみなす判定が行われる。
それらを厳密に同じかどうか判定するには、equal関数を使おう。
一つの式の中に、複数の条件を設定したいときに使う。
&&は「かつ」、||は「または」をさす。
論理回路で言うと、ANDとOR。×と+。
これだけだと何がなんだか分からないと思うので、以下例。
*0Headなでられ >なで好反応【タブ】(好感度)>=30&&(累計起動時)>=5 :……。 *なで好反応 :………ありがと。
上の条件は『(好感度)が30以上かつ(累計起動時)が5以上』という意味。
&&の左右両方の条件式が真(0以外)の時にだけ、1。それ以外は0になる。
全ての条件を満たした場合に1と考えてもいい。
続いて||を使ったものが以下。
*起動 >寒い【タブ】(現在月)==12||(現在月)==1||(現在月)==2 :こんにちは~。 *寒い :こんにちは~。 寒いね~。
こちらの条件式は、『(現在月)が12または1または2』という意味。
||の右左の条件式のどれか一つでも真(0以外)なら、計算結果は1になる。
条件をどれか一つでも満たした場合に1と考えてもいい。
詳細は比較演算子。
四則計算で「+-よりも×÷を先に計算する」というルールがあるように、演算子にも計算する順番がある。
すぱっと言ってしまうと、||は一番最後、&&は最後から二番目に計算される。
10 + 10 && 20 + 20 10 + 10 && 20 + 20 || 30 + 30 10 + 10 && 20 + 20 || 30 + 30 && 40 + 40四則計算が先にされるので、↓のようになる。
20 && 40 20 && 40 || 60 20 && 40 || 60 && 80次に、&&が先に計算される。
1 1 || 60 1 || 1最後に||を計算しましょうね。
1 1 1
なんともまあ酷いモデルだけど、感覚はつかめたと思う。
最優先の半角括弧も用意されているので、これで計算順序を操作してもいい。
条件式の部分に単語だけ書いても条件式として使える。
*OnMinuteChange >見切れ【タブ】(R1) *見切れ :画面の外からこんにちは。 :黙ってろ。 :うー。
このとき、(R1)に文字列や0以外の数字が入っている場合「見切れ」にジャンプ。
(R1)が0か、又は存在しない変数だった場合はジャンプしない。
つまり
*OnMinuteChange >見切れ【タブ】(R1)!=0
こう記述した時と同じ。~
*OnMinuteChange >見切れてない【タブ】!(R1) :画面の外からこんにちは。 :黙ってろ。 :うー。
単語の左に「!」を入れると逆の意味になる。
(R1)が0か存在しない変数の時、「見切れてない」へジャンプする。