分岐

状況によって、セリフや処理などを変える方法を記述します。~
大雑把に2つの方法がありますが、好きなものを選ぶと良いでしょう。
----
#contents
----
*分岐の例 [#s4d8419c]
ゴースト起動時の分岐を作ってみることにします。~
「*起動」が呼ばれる時に、以下の動作をするようにします。
-0時1時2時3時23時は深夜トーク、それ以外なら通常トークに分岐
-上記で「$起動した時間」に「深夜」、それ以外なら「昼」を入れる
-最後に共通のしめのセリフを入れる

**ジャンプを使う例 [#w375146b]
[[ジャンプ>特殊記号一覧#q19f7fda]]での分岐は、テンプレート[[Rポストと狛犬]]でも使われている方法です。
 *起動
 >深夜トーク【タブ】(現在時)<=3||(現在時)>=23
 :まだ(現在時)時かあ……。
 $起動した時間【タブ】昼
 >起動しめトーク
 
 *深夜トーク
 :(現在時)時……そろそろ夜食の時間だね。
 $起動した時間【タブ】深夜
 >起動しめトーク
 
 *起動しめトーク
 :とりあえず冷蔵庫あさってこよう。

ジャンプで作ることの利点は、とにかく分かりやすいことです。~
処理の流れが、里々に慣れていなくてもだいたい分かります。~
さらに、[[$>特殊記号一覧#oaf50eda]]や[[>>特殊記号一覧#q19f7fda]]などでは改行が出ないため、改行を意識する必要がありません。

その代わり、ジャンプであちこちに処理自体が飛んで行くので、~
「*起動」がどんな動作をしているか、全てのジャンプ先を確認しなければ分かりません。~
後々に確認した時に動作を把握するのが大変です。

-利点
--分かりやすく、バグを出しにくい
-欠点
--ジャンプの名前の通り、処理が戻ってこないので複雑になると処理を追うのが大変

**whenなどの条件分岐関数を使う例 [#h6e2af2a]
[[条件分岐関数>内部関数#v6de3b74]]を使った分岐のサンプルです。
 *起動
 (when
 、(現在時)<=3||(現在時)>=23
 、(深夜トーク)(set、起動した時間、深夜)
 、(昼トーク)(set、起動した時間、昼)
 )φ
 (起動しめトーク)
 
 *深夜トーク
 :(現在時)時……そろそろ夜食の時間だね。
 
 *昼トーク
 :まだ(現在時)時かあ……。
 
 *起動しめトーク
 :とりあえず冷蔵庫あさってこよう。

条件分岐関数で作ることの利点は、処理の流れが分かりやすいことです。~
上記のサンプルでは、「*起動」にすべての分岐が書かれており、これ以外はトークのみが書かれています。~
「*起動」を見ればどんな処理か、何を呼び出しているのかがすぐに分かります。

その代わり、処理が複雑で、パッと見ただけでは理解しづらいです。~
括弧は1行として扱われるため、不自然な改行が出てしまい、[[φ>特殊記号一覧#d9244c7e]]などで改行の制御を意識する必要があります。

-利点
--最初の関数に全ての分岐を書くことで、処理が追いやすくなる
-欠点
--書き方が難しい

whenだと2つにしか分岐しませんが、3つ以上の場合、[[whenlist>内部関数#y20bdab0]]を使う方法があります。~
(whenの中にwhenを入れればいくらでも分岐可能ですが、さらに見づらくなります)
 *起動
 (whenlist
 、(nop、)#左辺
 、(現在時)<=3||(現在時)>=23#右辺1
 、(深夜トーク)(set、起動した時間、深夜)#結果1
 、(現在時)>=18&&(現在時)<=22#右辺2
 、(夜トーク)(set、起動した時間、夜)#結果2
 、(通常トーク)(set、起動した時間、昼)#どこにも一致しない場合の結果
 )φ
 (起動しめトーク)

*分岐の使い分け [#e5d92060]
ジャンプでの分岐も、条件分岐関数での分岐も、結局は好みの問題になると思います。
使い分けるのもありです。
 *起動
 >(現在月)月(現在日)日
 >通常起動
 
 *通常起動
 (when...
上記のように、ざっくりと処理を分類する時はジャンプを使い、~
個々のジャンプ先では処理を追いやすいように条件分岐関数を使うなど。~
条件分岐関数で制御した場合は、バグが出た時の対処や機能追加が楽であることが多いです。~
そのため、マウス反応だとか、好感度加算とか、コアとなる処理だけ条件分岐関数で書いておくなどもありです。
**OnTalkの書き換え [#t3a57c63]
[[里々のランダムトーク>独自イベント#t4a9920c]]の処理ですが、これも条件分岐関数で書き換えることが出来ます。
 *OnTalk
 >(R1)【タブ】(R0)
 ()
↓
 *OnTalk
 (when
 、(R0)
 、((R1))
 、()
 )
上記は、ジャンプで書いた場合[[$次のトーク>特殊変数#af320606]]がある場合はジャンプしてしまうのでそれ以降の処理が行われませんが、~
条件分岐関数で書くと必ず処理を通すことが出来ます。
 *OnTalk
 (when
 、(R0)
 、((R1))
 、()
 )φ
 (ランダムトーク後の処理)
 
 *メニュー
 _何か話して
 
 *何か話して
 ()φ
 (ランダムトーク後の処理)
 
 *ランダムトーク後の処理
 $トーク回数=(トーク回数)+1
 >100回記念の追加トーク【タブ】(トーク回数)==100

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