top / 1 / 2 / 3 / 4 / ex1 / 5 / 6 / ex2 / 7 / 8 / 9 / 10 / 11 / ex3 / 12 / 13 / 14 /..../ 関数 / 覚え書き / 倉庫

【 スクリプトの基礎A 】

「構造体について」

前回の続きと言うか、補足的な。
ちょっと短め。

オヤジ、また聞きたい事ができた。


お、やってるようだな。 なんだ?


あれからちょっとMODを見てみたんだが、変数だか関数だか判らないものがあるんだ。
ちょっとこれを見てくれ。

function itemuse(what) local obj_name = what:name() if (string.find(obj_name, "repair_kit")) then use_repair_kit(what) elseif (string.find(obj_name, "choco_egg")) then use_choco_egg(what) -- If you want to add new trigger item, add script this line. end end


ははーん。
2行目の「what:name()」の記述だな?


知っているのか?


まだ早いかと思ってあえて説明はしなかったんだが、まあ考えてみたら、これも避けて通るわけにはいかんな。
これは「構造体」とか「クラス」とか呼ばれるものだ。


むう。
聞くからに面倒くさそうな雰囲気だな。


まあそうでもないぞ。
変数と関数の事を正確に知ってさえいれば、何てことはない。
まあ構造体と言う名前からある程度は察しが付くかも知れんが、これは変数や関数の集合体だと思って良い。


何となくだが、名前からはそんなイメージが伝わるな。


例えばだ、ここに手帳が一冊ある。中には・・・そうだな、Marked one、お前の事が書かれているとしよう。
1ページ目に本名、2ページ目に所属している派閥、3ページ目に好きな休日の過ごし方、のような感じでな。
そこで、この手帳のタイトルを「marked1」と名付けたとしよう。
これは変数の集合体であり、構造体の一種と言える。
この構造体の機能は、中にデータを保管し、好きな時に見る事が出来ると言う事だ。ここまでは判るな?


ああ。言いたい事は何となく判ったぞ。
さっき俺が持ってきた例では:(コロン)」を使っていたな。それが構造体である事を示しているんじゃないのか?


察しが良いな。Marked one。その通りだ。
仮に1ページ目に書いてあるお前の本名のデータを知りたいときには、こうすれば良い。

local stalkername stalkername = marked1:fullname

こんな感じだ。
つまり、この構造体「marked1」は、こんな構造になっていると思って良い。

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


こうやってお前に関する情報をひとまとめにしておけば、データを管理しやすいだろう。


そうだな。
構造体名の名前を変えることで、他人のデータを管理する事も出来るわけだな。


そうだ。
だが、お前の持ってきた例はこれだけじゃないな。


ああ。「what:name()」これは・・・関数に見えるが?


そうだ。
では、同じ手帳でもこんなのはどうだ?


システム手帳だな。
一般の手帳に加え、エンピツと消しゴムが付いている。
索引もあるので目的のデータを簡単に探せるな。


うむ。ではこのシステム手帳の機能を説明してみろ。


ええと・・・。
まずは手帳本来の機能として、「中にデータを保管し、好きな時に見る事が出来る」だな。
あとは、「エンピツでデータを追加する事」「消しゴムでそれを消す事」、それに「索引で素早くデータを探す事」くらいか。


そうだ。
つまり構造体とは、データを保管し閲覧すると言う「変数」の機能だけではなく、そのデータに対し何かしらのアクションを行う「関数」の機能も持つ事が出来るわけだ。
仮に、このシステム手帳をさっきの例に例えると、こうなる。

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


なるほど。
つまり、「what:name()」の記述は、「構造体whatの持つ関数name()を実行しろ」と言う意味なんだな。


その通りだ。Marked one。
ちなみにその「what」と言う構造体は、お前が例に出した関数「itemuse」の引数として、上位のファンクションから受け取ったものだと言う事を忘れるな。
つまり関数「itemuse」は、上位から何かしらの「データの塊」を受け取って、それに「what」と言う名前を付けたと言うわけだ。


構造体関数の呼び出し方は、スクリプトファイル内の関数を呼び出す時と似ているな。
ngc_mod.ngclordcheck()これを思い出したぞ。


構造体の関数を使う分には似たようなもんだな。
ただ、スクリプトファイルの方はファイル内の変数を別のファイルから閲覧するような事は出来ないから、あくまでも別のものだとは思っておいたほうが良いぞ。


良く判った。
これであの関数の先を読む事ができるぞ。


そろそろ文法絡みでは俺の教えられる事も少なくなってきたから今のうちに言っておくが、他にも知るべきことは色々あるし、今までの話だけでは説明できない例外的な要素も沢山ある。
中には、「何だか良く判らないが、そーゆーもの」としか覚えようの無いものもあるだろう。
どちらにせよ、重要なのは「何をどうすれば、結果はどうなる」、これを把握する事だ。
ぶっちゃけ、これさえ押さえちまえば後はどうにでもなるもんだ。

さて、他に聞きたい事は無いか?


いや、今はない。
また判らなくなったら聞きに来るぜ。じゃあな。


グッハンティンストーカー。




top / 1 / 2 / 3 / 4 / ex1 / 5 / 6 / ex2 / 7 / 8 / 9 / 10 / 11 / ex3 / 12 / 13 / 14 /..../ 関数 / 覚え書き / 倉庫
ニャギ茶★SPOT --工作部屋--