- 追加された行はこの色です。
- 削除された行はこの色です。
- 関数の活用例 へ行く。
[[内部関数]]、[[外部関数/ssu]]を工夫して活用する例。~
----
#contents
----
~
*見づらくなった分岐条件を短縮する [#k863e355]
**countを使った例 [#cead83bf]
曜日などで分岐する条件を作ろうとすると、大抵以下のようになります。
>営業【タブ】(現在曜日)==月||(現在曜日)==火||(現在曜日)==木||(現在曜日)==金
>タイムサービス【タブ】(現在時)==9||(現在時)==13||(現在時)==17
-…条件が2~3個ならまだしも、数が増えるにつれて読みにくくなり、編集もしづらい。
-そこで、関数を活用して、単純な条件式を短縮してみましょう。具体的には、上の例は以下のように書き換えることができます。
>営業【タブ】(count,月火木金,(現在曜日))
>タイムサービス【タブ】(count,x9x13x17x,x(現在時)x)
-[[count>外部関数/ssu#xa6f939f]]を使った例。
-「条件式は1以上なら真」なので、どれかがヒットすれば成立するというわけ。
-タイムサービスは現在時が一桁のときに誤爆してしまうのを防ぐために両端をxで挟む。こういう工夫で応用が利きます。
~
**split/nswitchを使った例 [#b64f7c35]
-こちらはsplitやnswitchを使ったテクニック。
-あまり応用が利かないので使う機会は限られますが、覚えておいて損はないやり方です。この例のような「0や1からスタートする」「返す文章が少ない」場合には非常に有効。
#例文
@季節
(
if,(現在月)>=3&&(現在月)<=5,春)(
if,(現在月)>=6&&(現在月)<=8,夏)(
if,(現在月)>=9&&(現在月)<=11,秋)(
if,(現在月)>=12||(現在月)<=2,冬)
-[[split>外部関数/ssu#k30d1e1d]]による短縮
--0オリジン(0からスタート)。なので文字列の頭は分割文字にし、S1から定義していく。
--%%splitコマンドの分割最大数は40?らしい、従ってこれを超える場合は使用不可。%%
@季節
(nop,(split,x冬x冬x春x春x春x夏x夏x夏x秋x秋x秋x冬,x))(S(現在月))
-[[nswitch>外部関数/ssu#m797af99]]による短縮
--1オリジン(1からスタート)。
--季節や年月日のように1からスタートする値ならこれの方が短くて便利。
@季節
(nswitch,(現在月),冬,冬,春,春,春,夏,夏,夏,秋,秋,秋,冬)
-split→nswitch
--『時』『分』『秒』などの時間系の値や、プログラム的な変数の序列で0からスタートする値を使う場合、又は、splitで分割最大数に引っ掛かってnswitchを利用する場合は、いずれも[数値]に予め+1することで対応できます。この場合calcコマンドを使わなくても大丈夫、↓は例。
@夜判定
(nswitch,(現在時)+1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1)
# (現在時)が19時~4時だった場合は1が、それ以外は0が返る
# [結果]の定義は 0時,1時,2時...と0からスタート
*同じ\0名のゴーストへの交代トークを個別に設定する [#tae46506]
**countを使った例 [#ia4f2497]
「\0名が同じだけど別のゴースト」に個別に変更トークを作るとき、里々でも判別が可能です。~
関数とOnGhostChangingの(R3)を使いますが、短いので超手軽。~
これで名前が被っても安心。
*OnGhostChanging
>(R0)へ変更
*ポストへ変更【タブ】(count,(R3),post)
:旧ポストへ交代するよ。
*ポストへ変更【タブ】(count,(R3),R_POST_and_KOMAINU)
:R版ポストへ交代するよ。
-(R3)には切り替えるゴーストのフォルダ名まで含めた固有のパスが入っています。
-つまり、これとそれぞれのフォルダ名をcount関数であるかどうかチェックすれば、どっちのポストなのか判別できるというわけ。