さらにプログラムの仕組みについて見てみましょう。
|
イベントドリブンなプログラム
このKAB−studioのホームページを見てください。完全に読み込まれた時点で、JAVAスクリプトのプログラムは終了しています。 でも、右上の「メニュードロップダウン」からページを選択すると――あーら不思議、他のページに移動しましたね。 この仕組みは「ドロップダウンからひとつ選択する>関連づけされた関数が実行される>関数が他のページをブラウザに読み込ませる」という手順で行われます。そしてこれこそが「イベントドリブン」なのです!
イベントドリブン。「イベント」はevent、出来事とか催し物とかそういう意味です。ここでは「選択する」ことが「出来事」になるわけです。「ドリブン」はdriven、driveの受身形です。「ドライブ」は分かりますね、車を運転したり、ディスクを回したり、そういう「動かす」ことを意味します。
昔のプログラムは、単に計算をするだけのものでした。でも、今は「視覚的にわかりやすいもの」が求められています。分かりやすいということはアクションをすれば反応してくれるということでしょう。最小化ボタンを押せば最小化する、ドラッグすれば選択される、こういうことに対応したプログラムを書くとき、イベントドリブンは非常に分かりやすく作ることができます。
ウィンドウズプログラミングをC言語で行う場合、普通のプログラムをベースにしてイベントドリブンなプログラムを作ることになります。これはちょっと大変ということで、Visual C++を使いC++言語の機能を使うことで「普通のプログラム」の部分を覆い隠しています。さらにVisual BasicやDelphiでは、完全と言っていいほど消し去っています。そして、こういったイベントドリブンへの流れはJAVA系にしっかりと受け継がれています。 |
行ったり来たり分かれたり
関数を使った場合には、基本的に流れは一方通行です。その流れを変える予約語が言語にはあります。
ifは「もし、**なら」のような形で流れを変更させることができます。例えばある変数が1なら右へ、0なら左へ、のような形です。
この3つが基本です。そして、これだけあれば十分です。これらを駆使してプログラムの方向を変更していってください。でもバックだけはできません。 |
ネストとその深さ
上のみっつのうちifとforを使ってみた例です(言語はJAVAスクリプト)。 |
function TestFunc( p_i )
{
for( iF1 = 0; iF1 <= 9; iF1++ )
{
if( iF1 == p_i )
{
document.write( "いっしょ!!" );
}
else
{
document.write( "いっしょじゃない!?" );
}
}
return iF1;
}
特に意味のない関数です。この関数、{}(中カッコ)がいっぱいありますね。必ず、{があれば}があります。プログラムはこの単位の塊でできています。これを「ネスト」と呼びます。訳すと「巣」とかいう意味になります。
見れば分かるとおり、ネストには必ず最初に何かがあります。関数名だったり、ifだったり、そういういわゆるネストのタイプがあって、「このネストの範囲はこういう意味なんですよ」みたいなことを宣言しているわけです。 その範囲を分かりやすくするためにタブを使うと見やすくなります。エディタによっては自動的にタブを挿入してくれるものもありますし、数行まとめてタブを入れる機能があったりもします。エディタをチェックしてみましょう。 ネストを作る時の注意点は、ネストを交差することはできないということです。例えば |
function TestFunc( p_i )
{
for( iF1 = 0; iF1 <= 9; iF1++ )
{
if( iF1 == p_i )
{
document.write( "いっしょ!!" );
}
else
{
document.write( "いっしょじゃない!?" );
}
} //ここが交差してます。
return iF1;
}
こんなことしても、最初の例と同じように解釈されます。要するにムリって事ですね。
これはとても重要なことです。関数から関数を呼び出すと、感覚としては元の関数の中に、呼び出した関数のコードが展開されるみたいな感じです(実際には違います)。また、if等のその他のネストも、他のネストに含まれています。つまり、どんなネストも何らかのネストに含まれ、最終的にはすべてのネストがエントリーポイントの関数のネストに包まれているということです。
こういったプログラムの組み方を構造化プログラミングと呼びます。ネストという単位を組み合わせ内包していくことでプログラムが構成されているわけです。 このネストは、C言語系とJAVA系は{から}です。Pascal系はbeginからendです。Visual Basic系はちょっと特殊で、上で書いた「ネストのタイプ」で始まり、そのネストのタイプごとの「閉じる単語」を使う必要があります。ForからNext、Do WhileからLoop、IfからEnd Ifといった感じです。 |
「構造化」の大切さ
まとめです。プログラムは一行ずつ上から下へと流れていき、関数を渡っていきます。ここで、流れに対してふたつの見方をしてみましょう。 ひとつは一貫した流れ。最初から最後まで、一直線にすべての道筋をたどるもの。 もうひとつは、関数ごとの流れ。「この関数の中ではこう流れる」という風に、ひとつひとつ区別して考えるもの。 このふたつの見方がバランスよくできることが、大切です。これはつまり、プログラムの中に適度に関数が存在するということです。
前に説明したように、プログラムは計算をするものです。そのため、データ(つまり変数)の管理を重要視するべきです。
これは関数だけに言えることではありません。ifやwhileのネストにも意味があります。繰り返しや分岐をうまく組み込むことによって、同じ事をするコードを減らすことができます。
次回は、さらにデータを分かりやすくするため、変数の発展形について見ていきましょう。 |
(C)KAB-studio 1998 ALL RIGHTS RESERVED. |