call関数について。
自作関数は上級者向けと思われがちですが、callを使っていないだけで、無意識に同等のものを組んでいる人は多いです。




自作関数

里々で自作関数を使うには内部関数のcallで実現します。
関数と言うと難しそうに聞こえますが、

  • 『現在月を入れると、季節(春夏秋冬)を返す』
  • 『現在時や現在月を入れると、昼か夜かを返す』
  • 『郵便物の重さの数値を入れると、料金を返す』
  • 『地域情報を入れると、その地域の天気予報を返す』

といった具合に、掻い摘んで言えば何かを入れたら、何かが返ってくるものです。
使いこなせば制作・管理・仕様変更の労力の削減に役立つはず。

call関数

そもそもcall関数とは、*文または@単語群に引数を付けて呼ぶ関数です。

呼び出された文または単語群では、(A0)で引数0を、(A1)で引数1を、以下数字通りに参照できます。

(call,文または単語群,引数0,引数1,引数2......)

呼び出す文または単語群がいわゆる自作関数になります。
…と、こう書くとなんだか特別な何かに見えるかも知れませんが、
動作は普段()で呼び出すのと変わりません。
つまり(call,文または単語群)と(文または単語群)は同じものです。
もっと言えば、引数を指定しないcall関数はcall,の文字数分だけ無駄という事に。

@箱の数
(A0)に(A1)が(A2)個あります。

*例1
(call,箱の数,部屋,箱,16)

*例2
(箱の数)

という風に書いた時、
例1では「部屋に箱が16個あります。」
例2では「にが個あります。」
と表示されます。
つまり、call関数を使わずに呼び出すと(A*)は空白となり表示されません。

replace.txtで自作関数っぽく

replace.txtで置き換えておくとcallを省略でき、自作関数らしく記述できます。

(箱の数,【タブ】(call,箱の数,
*
:(箱の数,部屋,箱,16)

活用例

季節を返す

引数に月を与えると季節を返します。
例えば、(call,季節,3)と呼び出すと「春」が返ってきます。

@季節
(nswitch,(A0),冬,冬,春,春,春,夏,夏,夏,秋,秋,秋,冬)

*
:3月の季節って(call,季節,3)?
:まだまだ寒いで。つーか今(call,季節,(現在月))やん。

月齢を返す

月齢を計算するより。年・月・日を入れるとその日の月齢に置き換わります。

@月齢
(calc,
((((A0)-11)%19)*11 +(nswitch,(A1),0,2,0,2,2,4,5,6,7,8,9,10)+ (A2))%30
)

*
:2016年1月1日の月齢は(call,月齢,2016,1,1)だよ。
:ちなみに今日の月齢は(call,月齢,(現在年),(現在月),(現在日))やね。

指定した音声を鳴らす

サウンド再生タグを楽に書く。
(※「sound」フォルダにbird.wavやbell.wavが入っている状態での例)

*
:(call、音、鳥)鳥のなきごえです。\w9\w9\w9
:(call、音、ベル)ベルの音です。

@音
(whenlist、(A0)==
	、鳥、\_v[sound/bird.wav]
	、ベル、\_v[sound/bell.wav]
)

このようにして鳴らすファイルを「@音」をcallで呼び出すようにして、鳥のなきごえを鳴らしたい場合は必ず(call、音、鳥)と記述します。
鳴らすファイルを変えたりしたい場合に、「@音」の中のファイル名だけを指定し直せば、鳥のなきごえが複数箇所で使われていても、まとめて修正されます。
とりあえず音を鳴らす処理は全部「@音」の中にある!と分かるようにしておくことで、機能の改造やバグの対応が楽になります。

計算する

2つの数字を足し算したり掛け算したり

*
:5と4で計算

(call,計算,5,4)

*
:8と16で計算

(call,計算,8,16)

*
:10と22で計算

(call,計算,10,22)

*計算
:(A0)と(A1)を足すと「(calc,(A0)+(A1))」になるよ。
(A0)と(A1)を掛け算すると「(calc,(A0)*(A1))」になるよ。

好感度などの管理をさせる

好感度を変更し、なおかつ上限値と下限値の範囲に収まるようにします。

*0Headなでられ
:ありがとう。
(call、好感度変更、1)

*0Bustなでられ
:変態!
(call、好感度変更、−2)

@好感度変更
(whenlist、(好感度)+(A0)
	、>1000、(set,好感度,1000)
	、<0、(set,好感度,0)
	、(set,好感度,(好感度)+(A0))
)

上限値1000、下限値0になるようにし、それ以外なら好感度に渡された数を足しています。
マイナスの数が渡されれば好感度が減ります。
加算や減算のたびに上限値をチェックするのは無駄なので、call関数で1箇所で行っています。
上限値や下限値を変えたい場合、「@好感度変更」の中の数字だけいじれば良いので修正も楽です。
機能の改造をしたいときも、「@好感度変更」だけ見れば良いので、どこを触れば良いかが分かりやすくなります。

#好感度200以下なら増加のみ2倍になるように機能を追加した
@好感度変更
(whenlist、(好感度)+(A0)
	、>1000、(set,好感度,1000)
	、<0、(set,好感度,0)
	、<200&&(A0)>0、(set,好感度,(好感度)+(A0)*2)
	、(set,好感度,(好感度)+(A0))
)

上記のサンプルの記述だと、(call、好感度変更、1)で1行を占めているので、改行が発生してしまいます。
そこで、今までと同様に変数の代入の形にし、改行を発生させないようにする方法が以下です。

*0Headなでられ
$ダミー【タブ】(call、好感度変更、1)
:ありがとう。

この$ダミーは使うことはありませんが、このような記述にすることで、全ての好感度増減の部分を一括で置換することが出来ます。
「$好感度=(好感度)+1」を「$ダミー【タブ】(call、好感度変更、1)」とすれば、機械的に一括置換できます。

整理

単語一覧メニューの項目を書く時すっきりさせる。

*
:いぬだいすき!
<単語一覧に「いぬ」項目が追加されました>
$単語_いぬ【タブ】1

*単語一覧
:単語一覧です。

(call,単語項目,いぬ)φ
(call,単語項目,ねこ)φ
(call,単語項目,とり)φ
(call,単語項目,くま)φ
(call,単語項目,うさぎ)φ

@単語項目
(when、(変数「単語_(A0)」の存在)、☆ \q[(A0),単語一覧の意味]\n)

*単語一覧の意味
((選択ラベル)の説明)

_単語一覧

*いぬの説明
:ワンワン吼える動物。

*ねこの説明
:にゃーにゃー鳴く動物。

*とりの説明
・・・(以下略)

(call,単語項目,いぬ)の場合、「$単語_いぬ」に値が設定されていれば、選択肢が表示されます。
選択肢自体も「いぬ」という文字から自動的に作っているため、項目を追加していく時に楽が出来ます。
(選択ラベル)には直前に選んだ選択肢が入ります。
以下のように展開されていきます。

((選択ラベル)の説明)
↓
(いぬの説明)
↓
:ワンワン吼える動物。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-05-18 (木) 19:29:04 (154d)