プログラムの作り方

プログラムはどのような手順で作るのか、例をあげて説明します。

（１）どんなプログラムを作るか決める

おみくじプログラムを作ることにします。 実行されるごとに、いくつかの異なったメッセージがランダムに表示されるものです。

（２）そのプログラムの使い方を決める

js> load('...')

を行ったら

今日の運勢は○○です

などと表示されることにします。

ここでファイル名も決めておきます。

（３）プログラム全体の構成を決める

関数を使って書くことにします。 関数名は omikuji にしました。引数は必要ないので名前の後ろは括弧だけです。 printは関数の中で行う書き方を使うことにします。（値を返し、関数を呼び出す側でprintする方法もあります。） loadしたら実行されるように、関数定義のあとに関数呼び出しを書きます。

すると、全体の構成は次のようになります。

/* コメント */
function omikuji() {
...
print(...);
return;
}
omikuji();

テキストエディタを使ってここまで入力し、先に決めたファイル名で保存します。 この時点でコメントも書いておきます。

（４）手順を考える

関数内で行うことがらを、行う順に書き出してみます。

１）乱数を発生させる

２）乱数の値によって場合分けし、それぞれのおみくじの内容を決める

３）表示する

以上３つのことを行うプログラムを書けばよいことがわかります。

３）はprint文で書けます。

２）はif文を使って場合分けする書き方を使えばよい。

１）は乱数を発生させる関数を使います。処理系で用意されています。

Math.random() はこの関数を呼び出すたびに０～１の範囲の数をランダムに返します。 この値を変数 ransu に覚えておき、ransuの値を使って場合分けすることにします。

２行追加し、このようになります。コメントは省略しています。

function omikuji() {
var ransu;
ransu = Math. random();
...
print(...);
return;
}
omikuji();

... の部分が場合分けの処理になります。 場合分けごとに、おみくじの内容を変数の値として覚えさせることにします。

変数の値としては数値だけでなく、文字列も使えます。 例えば

unsei = '大吉';

を行った後で

print ( '今日の運勢は', unsei, 'です' );

を実行すると

今日の運勢は大吉です

と表示されます。

さらに２行修正しました。

function omikuji() {
var ransu, unsei;
ransu = Math. random();
...
print ( ' 今日の運勢は', unsei, ' です' );
return;
}
omikuji();

（５）プログラムの詳細部分を書く

いくつの場合に分けるか考えます。

さいこー

ぼちぼち

いまひとつ

の３つの場合に分けるときの書き方は次のようになります。

if (...) { unsei = 'さいこー'; } else if (...) { unsei = 'ぼちぼち'; } else { unsei = 'いまひとつ'; }

条件を書けば完成です。 ransu には０～１の範囲の値が入っているので、これを３つに分けて

０～０．３３ のとき さいこー

０．３３～０．６６ のとき ぼちぼち

０．６６～１ のとき いまひとつ

にすることにします。 ０．３３と０．６６は２箇所に現れていますが、０．３３はぼちぼち、０．６６はいまひとつの方に入れることにします。

ransuには０～１の範囲の値しか入っていないので、 さいこー の処理がされる条件としては ransu < 0.33 だけを書けばよいことがわかります。

if ( ransu < 0.33 ) { unsei = 'さいこー'; }

ぼちぼち が処理される条件は 0.33 <= ransu と ransu < 0.66 の２つですが、 最初に判定される条件 ransu < 0.33 が成り立たないときだけについて考えればよいので、0.33 <= ransu は不要で、ransu < 0.66 だけを書けばよいことが分ります。

いまひとつ が処理される条件は 0.66 <= ransu ですが、これは最初と２番目に判定される条件を２つとも満足しないときに対応するので else で良いことも分ります。

プログラムは次のようになります。

function omikuji() {
var ransu, unsei;
ransu = Math. random();
if ( ransu < 0.33 ) {
unsei = ' さいこー';
}
else if ( ransu < 0.66 ) {
unsei = ' ぼちぼち';
}
else {
unsei = ' いまひとつ';
}
print ( ' 今日の運勢は', unsei, ' です' );
return;
}
omikuji();

この形の場合分けは良く使われます。 場合分けにおける条件の書き方を、図とプログラムで対応させてみてください。

（６）動作するか確かめる

保存し何度か load を行って、そのたびに違った内容が表示されることを確かめます。 どの場合もちゃんと実行されるか、何度も実行してみましょう。