#author("2023-05-18T12:46:54+09:00","default:post","post") 条件式とは、文字通り分岐や採用のための「条件」のこと。~ ---- #contents ---- ~ *条件式のきほん [#m5725433] >ジャンプ先【タブ】(条件式) *トーク名【タブ】(条件式) @単語群名【タブ】(条件式) 主にでてくるのはこれ。他には[[if関数>関数一覧#ifwhen]]とかで使う。~ この条件式が''真''である時にそれぞれ有効になる。~ 逆に''偽''の時には、無効になる。~ トークや単語群で使った時の効果は、[[特殊記号*の採用条件>特殊記号一覧#q1c400bd]]を参照のこと。~ **「真」と「偽」 [#tea23705] たぶん一般的なプログラミング用語だと「真偽」。~ 条件式を実行・展開すると、それは必ず「真」か「偽」になる。~ これは、文字通り、正しいか間違っているかの二種類を指す。~ 「YES」か「NO」か、と言い換えてもいい。~ -真 --条件式があてはまる・YES --1以上の数字(厳密には0以外) -偽 --条件式があてはまらない・NO --0(数字のゼロ) **条件式に使うもの [#hafde11d] 何だっていい。~ 上に書いたように、最終的に0以外の数字なら「真」になるのだから、計算式を使ってもいいわけだ。~ [[文字列判定>関数一覧#category_chk]]のような、条件式そのまんまのような関数だってある。~ が、だいたいは以下のものをよく使う。~ :[[比較演算子>演算子一覧]]|計算式にこれを使う。~ 200>100 こういうやつね。~ で、比較演算子を使った場合、それが合っていれば「1(真)」、間違っていれば「0(偽)」に置き換わる。~ ついでに、数字の計算と、こういう記号による変な計算?のことをまとめて「演算」と呼ぶ。ああだから「演算子」ね。~ :変数|その変数の中身が存在しない時は、常に偽。~ 変数の中に、さらに計算式を書いたっていい。~ **比較演算子の例 [#y01a697d] [[演算子一覧]]にある。一例として取りあげると…~ -例~ |BGCOLOR(white):||c |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になる。 **ジャンプと条件式の動作 [#w271592a] さて、本題。~ 冒頭で書いたように、里々では様々な箇所に条件式を使うことができる。~ >ジャンプ先【タブ】条件式 とあった場合、条件式の計算結果が真(0以外の数値)であればジャンプし、偽(0)であればこの行を無視して次の行へ進む、ということになる。~ 条件式は最終的に数値であればいいので、極端な例では *てすと >ジャンプ先0【タブ】0 >ジャンプ先3【タブ】3 >ジャンプ先5 とすると、「ジャンプ先0」は永遠にスルーされ、必ず「ジャンプ先3」へと進む事になる。~ もちろん「ジャンプ先5」はまったく触れられもしない。~ 今度は条件式に比較演算子を使ってみる。~ * >おやつタイム【タブ】(現在時)==15 >夜中のおやつ【タブ】(現在時)==3 *おやつタイム :三時だ。おやつにしよう。 *夜中のおやつ :三時だ。おやつにしよう。 :夜中の三時じゃねえか! [[(現在時)>情報取得変数#i300e762]]は現在の時刻に置き換わる[[情報取得変数]]。~ 昼間の三時は15。夜中の三時の時は相方が夜中だ!と怒る。~ *TIPS [#ab2f0c6a] **比較に関する話 [#ge44dc01] 文字列を比較するとき、数字や算術記号が含まれているとエラーが出る事があるため、[[compare>関数一覧#compare]]関数や[[equal>関数一覧#equal]]関数を使用した方が安全。~ >イベント【タブ】(変数)==比較文字列 これを下の様に書き換える。 >イベント【タブ】(compare,(変数),比較文字列) ただし、compare関数では半角と全角の文字を同一とみなす判定が行われる。~ それらを厳密に同じかどうか判定するには、equal関数を使おう。~ **比較演算子 && と || の使い方 [#p52e0532] 一つの式の中に、複数の条件を設定したいときに使う。~ &&は&color(#ff0000){「かつ」};、||は&color(#ff0000){「または」};をさす。~ 論理回路で言うと、ANDとOR。×と+。~ これだけだと何がなんだか分からないと思うので、以下例。~ *0Headなでられ >なで好反応【タブ】(好感度)>=30&&(累計起動時)>=5 :……。 *なで好反応 :………ありがと。 上の条件は『(好感度)が30以上&color(#ff0000){かつ};(累計起動時)が5以上』という意味。~ &&の左右両方の条件式が真(0以外)の時にだけ、1。それ以外は0になる。~ ''全ての条件を満たした場合に1''と考えてもいい。~ 続いて||を使ったものが以下。~ *起動 >寒い【タブ】(現在月)==12||(現在月)==1||(現在月)==2 :こんにちは~。 *寒い :こんにちは~。 寒いね~。 こちらの条件式は、『(現在月)が12&color(#ff0000){または};1&color(#ff0000){または};2』という意味。~ ||の右左の条件式のどれか一つでも真(0以外)なら、計算結果は1になる。~ ''条件をどれか一つでも満たした場合に1''と考えてもいい。~ **使用例 [#e25a8177] &&と||を活用することで、特定の数字の範囲にだけ成立する条件式を作る事も簡単になる。 -5時から8時の間だけ1になる条件式 (現在時)>=5&&(現在時)<=8 -21時から翌3時の間だけ1になる条件式 (現在時)>=21||(現在時)<=3 表にするとこうなる。 |~条件式\時刻|~0|~1|~2|~3|~4|~5|~6|~7|~8|~9|~10|~11|~12|~13|~14|~15|~16|~17|~18|~19|~20|~21|~22|~23| |(現在時)>=5&&(現在時)<=8|0|0|0|0|0|1|1|1|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0| |(現在時)>=21||(現在時)<=3|1|1|1|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|1|1| **比較演算子 && と || の優先度 [#q822e5c6] 詳細は[[比較演算子>演算子一覧]]。~ 四則計算で「+-よりも×÷を先に計算する」というルールがあるように、演算子にも計算する順番がある。~ すぱっと言ってしまうと、||は一番最後、&&は最後から二番目に計算される。~ -例えばこんな風に式が3つあったとする。~ 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 1 || 60 1 || 1 最後に||を計算しましょうね。~ 1 1 1 なんともまあ酷いモデルだけど、感覚はつかめたと思う。~ 最優先の半角括弧も用意されているので、これで計算順序を操作してもいい。~ **単語単体を条件式にする [#rb56b50f] 条件式の部分に単語だけ書いても条件式として使える。~ *OnMinuteChange >見切れ【タブ】(R1) *見切れ :画面の外からこんにちは。 :黙ってろ。 :うー。 このとき、(R1)に文字列や0以外の数字が入っている場合「見切れ」にジャンプ。~ (R1)が0か、又は存在しない変数だった場合はジャンプしない。~ つまり *OnMinuteChange >見切れ【タブ】(R1)!=0 こう記述した時と同じ。~ *OnMinuteChange >見切れてない【タブ】!(R1) :画面の外からこんにちは。 :黙ってろ。 :うー。 単語の左に「!」を入れると逆の意味になる。~ (R1)が0か存在しない変数の時、「見切れてない」へジャンプする。~