【 用語、文法 】

■ファンクション:

一連の機能を持った作業の単位。
「ファンクション」のほかに「命令」「関数」とも呼ぶ。
厳密には完全に同じ意味ではないが、取りあえずここではほぼ同義語と考えて良い。
できるだけ「ファンクション」で統一して書くつもりではあるが、その場のノリで「命令」だの「関数」だの言うかも知れない。
その時には脳内変換して欲しい。

定義:
function ファンクション名(引数) 〜内容〜 end

機能名の後ろのカッコは呼び出し元から受け取った情報が入っている。(無い場合もある)
詳細は引数の項目で説明するのでそちらを見てくだされ。


■変数:

データを一時的に保管しておく器の事。

定義:
local abcabc (英数字なら名前は自由)
local abcabc = 123 (定義と同時に初期値を123として設定)


■代入演算子:

 =
右辺のデータを左辺に書き込む。

使用例:
abcabc = 123 :変数abcabcの中に数値123を設定する
abcabc = xyzxyz    :変数abcabcの中に変数xyzxyzの内容を設定する


■if条件式:

処理を特定の条件によって分岐させるための文法。
およそ現存する殆ど全てのプログラミング言語に存在し、使い方も酷似している代表的なプログラム文法である。
え?アセンブラ言語?マシン語?そこら辺は例外。

文法:
if (条件A) then 条件Aが成立した場合に行う処理 elseif (条件B) then 条件Bが成立した場合に行う処理 else 全ての条件が成立しなかった場合に行う処理 end
elseifは条件が複数ある場合に記述。幾つでも増やせる。
必要ない場合、elseif文とelse文は省略できる。
条件のカッコは省略できる(「if (条件) then」「if 条件 then」と書ける)が、スクリプトを見やすくする意味で記入した方が良い。


■比較演算子:

主に条件式内で使用する。

 == 左辺と右辺がイコール
 ~= 左辺と右辺がイコールでない
 <  左辺が右辺より小さい
 >  左辺が右辺より大きい
 <= 左辺が右辺以下
 >= 左辺が右辺以上

使用例:
if (abcabc == 123) then 変数abcabcの中身が123であった場合に行う処理 elseif (abcabc > 123) then 変数abcabcの中身が123よりも大きい場合に行う処理 else 全ての条件が成立しなかった(変数abcabcの中身が123よりも小さい)場合に行う処理 end


■条件式の例外的な文法:

非常に例外的で、しかし非常に多用される使い方として、「==true」の省略がある。
条件式の比較演算子が「==」であり、かつ比較対象(右辺)が「true」の場合に限定して、この2つの要素を省略して書く事が出来る。
これにはプログラム構造的な理由があるのだが、とてもここでは説明しきれないので、ここでは「何でだか良く判らんが、こーゆーもの」と思って欲しい。
他人のスクリプトを見ると非常に頻繁に目にするので、避けては通れない例外である。

使用例:
if (abcabc == true) then
これを、

if (abcabc) then
このように書くことが許される。
主に条件式の中でファンクションを呼び出した場合に使われる文法である。
【 スクリプト型MODを作る 】でこのような条件式が登場したが、

if (xr_logic.pstor_retrieve(db.actor, "x_first_run", true) == true) then
これは、

if (xr_logic.pstor_retrieve(db.actor, "x_first_run", true)) then
このように書くことができると言うわけだ。
多分、オイラのスクリプトでも出てくると思うので、出てきても慌てないで欲しい。


■AND、OR演算子:

主に条件式内で使用する。
複数の条件を同時に扱う場合に使用する。

 and 左右の条件が共に成立するならばif条件成立とする
 or  左右の条件のどちらかまたは両方が成立するならばif条件成立とする

使用例:
if (abcabc == 123) and (xyzxyz == 456) then 変数abcabcの中身が123で、かつ変数xyzxyzの中身が456であった場合に行う処理 elseif (abcabc == 123) or (abcbac == 456) then 変数abcabcの中身が123または456であった場合に行う処理 else 全ての条件が成立しなかった場合に行う処理 end

■引数:

「いんすう」ではなく「ひきすう」と読む。
ファンクションを呼び出すときにカッコの中にゴチャゴチャ書いてあるアレ。
または、ファンクション名を書くときに、一番後ろについてるカッコの中身。

function ファンクション名(what)←このカッコの中身が「引数」

例えば、マー君にとあるストーカーをぶっ殺して欲しい場合は、マー君に「ぶっ殺せ」と言う「命令(ファンクション)」と共に、相手の「名前」を言わなければならない。場合によっては、「何処にいるか」も教える必要がある。
仮にこの命令をマー君的に作ってみると、

function ぶっ殺せ(名前, 居場所)←このカッコの中身が「引数」

こうなるわけだ。
逆にマー君に「寝ろ」とか言う単純な命令を出す場合、それ以外の情報を与える必要は無い。

function 寝ろ()←単純な命令なので「引数」は必要ない

ファンクションも同じであり、機能が複雑になるほど、その目的を明確にする為の情報が必要になってくるわけだ。
例えば、ゲーム開始フラグを下ろす機能を持つこのファンクションは、3つの引数を持っている。

xr_logic.pstor_store(db.actor, "x_first_run", false)
この例では「db.actor」「"x_first_run"」「false」の3つだ。
これらは(推定だが)最初から順に、「主人公に関する情報」「操作するべきフラグの名前」「フラグに設定するべき値」だと思われる。何しろ正確なソースもなく確認のしようが無いので「多分」だが・・・。
ともかく、このように、ファンクションを呼び出す時にそのファンクションに同時に引き渡すデータの事を「引数」と呼ぶ。


■戻り値:

ファンクションが呼び出し元に対して返す値。
ファンクションには「処理をするだけのタイプ」「処理の結果を報告するタイプ」の2種類がある。
後者の場合には「戻り値」と言う形で処理の結果を報告する。
戻り値の設定の仕方は、

return 戻り値

使用例:
function 何かの処理() 処理を実行。 if (処理に失敗した) then return false ←失敗したら、この時点でファンクション自体が終了。 end 次の処理を実行。 if (処理に失敗した) then return false ←ここも。 end return true ←全ての処理が成功したら「true」を返す。 end

フラグ以外のデータが戻り値になる場合もある。
こんな感じ。
function かけ算(kazu1, kazu2) local kekka kekka = kazu1 * kazu2 return kekka ←計算結果の数値が戻り値になる。 end


■構造体:

同じカテゴリに属する変数や関数をまとめて管理する「機能を持ったデータの塊」と考えると良い。
例えばマー君に関する手帳の場合、

構造体名:marked1
変数1:fullname(本名)
変数2:faction(派閥)
変数3:holyday(好きな休日の過ごし方)


こんな形の構造体になる。
この中のデータを参照する時には、

marked1:fullname

このように、「構造体名:変数名」の順で記述すれば良い。

システム手帳のように、手帳そのものが「追加」や「削除」の機能を持っているような場合には、

構造体名:marked1
変数1:fullname(本名)
変数2:faction(派閥)
変数3:holyday(好きな休日の過ごし方)
関数1:add_data(データ追加)
関数2:delete_data(データ削除)
関数3:find_data(データ検索)


このような形になる。
当然、この中の関数を使用する場合には、

marked1:add_data(追加するデータ)

この様な記述になる。

よほど大規模なMODを作らない限り、実際に自分で定義する事はまず無いと思うが、他人のMODや既存のスクリプトを解析する際には必ず目にする事になると思われる。