#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か存在しない変数の時、「見切れてない」へジャンプする。~

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS