*複雑になった条件式を短縮する [#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からスタートする値を使う場合。
--文字列の頭は分割文字にし、S1から定義していく。
--split関数は、動作する時に分割数を返すので、nopを使って表示させなくします。
@季節
(nop,(split,x冬x冬x春x春x春x夏x夏x夏x秋x秋x秋x冬,x))(S(現在月))
-[[nswitch>外部関数/ssu#m797af99]]による短縮
--季節や年月日のように1からスタートする値ならこれの方が短くて便利。
@季節
(nswitch,(現在月),冬,冬,春,春,春,夏,夏,夏,秋,秋,秋,冬)
-応用
--[数値]に予め+1することで、0からスタートする値でもnswitchを使えます。この時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からスタート