Sponsored Link

その7.GOGO!CGI

ルーチンの話
小梅:
さて、CGIつぅヤツなんですが…
メインルーチン

サブルーチン
て順番で書かれています。
そしてメインルーチンの最初には必ず前置きがあります。 本でいうと前置きは凡例、その次のプログラムは目次、サブルーチンが内容ってとこだね。
ぶら:
前置きっていうのは、色とか設定したところだね?
小梅:
そうそう。
CGIを動かすための約束事が最初に並ぶのね。
■L1-367は全部前置きです。
たとえば■L34。 この$マークのついているものはすべて変数というものなのね。
$bgcolor = '#FFFFFF'; # 背景色
これは、$bgcolor(変数)に#FFFFFFという色の数値を入れたよ(代入)という意味なのね。
だから、この前置きをした後は
<body bgcolor=#FFFFFF>

<body bgcolor = $bgcolor>
は同じことになるの。ほら、■L356を見て。
ぶら:
なんでわざわざ置き換えるの?
小梅:
変更がしやすいからだよ。たとえば
$bgcolor = '#FFFFFF'; # 背景色
$bgcolor = '#FF00FF'; # 背景色
って替えれば、後から出てくるすべての$bgcolorが置き換わるじゃない。
ぶら:
なーるほど。
『前置き』部分ではたくさんの変数の設定をしてるってことだね。
小梅:
うん。スクリプトの途中でころころ中身が変わる変数もあるけど、ゲーム内では固定になってる変数を『前置き』のところで決めるのね。
ぶら:
確かに、前置きのところはみんな$だね。
あれ?■L121$じゃなくて@だよ?
小梅:
それは配列っていって、変数の団体さんみたいなもんです。■L121-146にあるgif画像の名称をひとまとめにしてあるの。
ぶら:
@がついてるものは全部『配列』っていうんだね。
小梅:
そです。変数と配列を知らないと、CGIはわけわかんないからね。
さて、次にメインルーチンのプログラムがあります。
まあ、仕事の命令書ってとこかな。
PET ROOMで言うと、
・アクセスした時
・名前を入れてログインした時
・なでたり餌をやったりした時
・その他なんかユーザーがアクションを起こした時…
なんかに、何かクリックするでしょ?そのたびに毎回上から書かれた順に命令を実行します。
これがメインルーチン。
それとは別に、呼ばれた時だけ仕事をするのがサブルーチン。
簡単に言っちゃうと、
「誰が仕事をするか決める親分」がメインルーチン
「仕事をする子分」がサブルーチン

なのよね。
ぶら:
幻水的にいうと軍師と108星みたいなもんかしら。
小梅:
それだ。
メインルーチンってのは、■L368-384
ただしL368からL371までは見やすくするためのコメントだし、L384は空行だから、正確にはL372からL383までの12行なんだけど。
ぶら:
たったこれだけ?
小梅:
うん。毎回必ず実行されるメインルーチンがする仕事はこれだけ。
サブルーチンとサブルーチンの間で仕事のやりとりがあるから、実際にはもっと複雑だけど。
ぶら:
でも、この12行の意味さっぱりだあ…
小梅:
安心して、私もだから。
さて、■L385からL395までにSub Title Checkってタイトルと、sub titlecheck{…から始まる謎の言葉があるよね。
ぶら:
ピンクのとこだね。
小梅:
このsubで始まる色分けしたとこが、一つのサブルーチンなの。
Sub Title Check{
から
}
までがひとくくり。そして、このSub Title Checkから下、全部サブルーチンです。
ぶら:
Subで始まるもの、いっぱいあるよ。
小梅:
うん、みんなそれぞれ違う仕事を受け持ってる。subの次に書いてあるのがサブルーチンの名前。
ここでは、見やすいように色分けしてあるよ。
PET ROOMの中のサブルーチンは
sub titlecheck
から
sub gettime
まで34個…かな。
ぶら:
たくさんあるんだね。名前も、なんとなく「なんの仕事してるか」を表してるみたい。
小梅:
うん。$で始まる変数名も、subで始まるサブルーチン名も、スクリプトを作る人が自由に決めていいんだけど、やっぱり判りやすいように定型の名前があるみたい。
スクリプトは大病院だ!
ぶら:
このタイトルどういう意味?
小梅:
いや、このスクリプトの動きって何に似てるかなーと思ったら、あ、大病院だって思ったの。
ぶら:
どういうこと?
小梅:
大きな病院に行くと、必ず毎回受付するよね。で、何科にかかるか決めるじゃない。
それに、内科から消化器科に行ったりレントゲン科に移動したりする。
その動きが似てるなって思って。
ぶら:
つまり、メインルーチンが毎回行く受付。
サブルーチンが各科?
小梅:
そうそう!
■L368からのメインルーチンに、
&decode;
&openinpetdata;
&titlecheck;
って&で始まる部分あるじゃない? これが
decodeって名前のサブルーチンに行きなさい」
openinpetdataって名前のサブルーチンに行きなさい」
って命令なの。
ぶら:
受付から何科に行くかの指示だね。
この■L375ifってなあに?
小梅:
「もし○○だったら××しなさい」という分岐。CGIはいろんな命令があるけど、このifを覚えておくだけで、ずいぶん理解しやすくなって、改造も楽になるよ。
if ($FORM{'mode'} eq "end") { &error("$endmsg") }
は、ここでいうと、もし$FORM{'mode'}"end"だったら、sub errorに行きなさい、という意味なの。
そして、もし$FORM{'mode'}"end"じゃなかったら、次の行に行きます。
ぶら:
こんどはelsif???
小梅:
つぎの分岐点だね。
if(条件その1){条件その1だったらやること}
elsif(条件その2){条件その2だったらやること}
elsif(条件その3){条件その3だったらやること}



else{上の条件に該当しない時にやること}
っていうのがifの構造なの。
ぶら:
んんんー、ややこしいな…
小梅:
一例を挙げてみると…
if(くじが1等){ハワイ旅行}
elsif(くじが2等){温泉2泊3日}
elsif(くじが3等){DVDプレイヤー}
elsif(くじが4等){温泉の素}



else{ポケットティッシュ}
ぶら:
わかったようなわからないような。
小梅:
んー、やってくうちになんとなく判ってくると思うけどね。
別にこんなクイズを作ってみたよ。 ifの概念テスト
ぶら:
挑戦してきた。ハンフリーさんくじ運わるいね。
小梅:
…いや、そういう話じゃないんだけど…
まあいいや。とにかく、こういうifですべて条件にしたがって振り分けしたら、メイン処理の役目はいったん終わりです。 これが、
exit;
英語の意味そのまんま。
ぶら:
ifといいexitといい、英語の意味でなんとなく命令の内容が判るようになってるんだね。
TOP >> 1 >> 2 >> 3 >> 4 >> 5 >> 6 >> 7 >> 8 >> 9 >> 10 >> 11

PET ROOMはMissing Linkさんが配布されているCGIゲームです

[コーナートップ] [ブライト翔ぶ!] [ぶらいとふぉーらむ]