== プログラムの作り方 == プログラムはどのような手順で作るのか、例をあげて説明します。 ---- === (1)どんなプログラムを作るか決める === おみくじプログラムを作ることにします。 実行されるごとに、いくつかの異なったメッセージがランダムに表示されるものです。 ---- === (2)そのプログラムの使い方を決める === {{{ js> load('...') }}} を行ったら {{{ 今日の運勢は○○です }}} などと表示されることにします。 ここでファイル名も決めておきます。 ---- === (3)プログラム全体の構成を決める === 関数を使って書くことにします。 関数名は omikuji にしました。引数は必要ないので名前の後ろは括弧だけです。 printは関数の中で行う書き方を使うことにします。(値を返し、関数を呼び出す側でprintする方法もあります。) loadしたら実行されるように、関数定義のあとに関数呼び出しを書きます。 すると、全体の構成は次のようになります。 {{{#!java /* コメント */ function omikuji() { ... print(...); return; } omikuji(); }}} テキストエディタを使ってここまで入力し、先に決めたファイル名で保存します。 この時点でコメントも書いておきます。 ---- === (4)手順を考える === 関数内で行うことがらを、行う順に書き出してみます。 . 1)乱数を発生させる . 2)乱数の値によって場合分けし、それぞれのおみくじの内容を決める . 3)表示する 以上3つのことを行うプログラムを書けばよいことがわかります。 3)はprint文で書けます。 2)はif文を使って場合分けする書き方を使えばよい。 1)は乱数を発生させる関数を使います。処理系で用意されています。 Math.random() はこの関数を呼び出すたびに0~1の範囲の数をランダムに返します。 この値を変数 ransu に覚えておき、ransuの値を使って場合分けすることにします。 2行追加し、このようになります。コメントは省略しています。 {{{#!java function omikuji() { var ransu; ransu = Math.random(); ... print(...); return; } omikuji(); }}} ... の部分が場合分けの処理になります。 場合分けごとに、おみくじの内容を変数の値として覚えさせることにします。 変数の値としては数値だけでなく、文字列も使えます。 例えば {{{ unsei = '大吉'; }}} を行った後で {{{ print ( '今日の運勢は', unsei, 'です' ); }}} を実行すると {{{ 今日の運勢は大吉です }}} と表示されます。 さらに2行修正しました。 {{{#!java function omikuji() { var ransu, unsei; ransu = Math.random(); ... print ( '今日の運勢は', unsei, 'です' ); return; } omikuji(); }}} ---- === (5)プログラムの詳細部分を書く === いくつの場合に分けるか考えます。 . さいこー . ぼちぼち . いまひとつ の3つの場合に分けるときの書き方は次のようになります。 {{{ if (...) { unsei = 'さいこー'; } else if (...) { unsei = 'ぼちぼち'; } else { unsei = 'いまひとつ'; } }}} 条件を書けば完成です。 ransu には0~1の範囲の値が入っているので、これを3つに分けて . 0~0.33 のとき さいこー . 0.33~0.66 のとき ぼちぼち . 0.66~1 のとき いまひとつ にすることにします。 0.33と0.66は2箇所に現れていますが、0.33はぼちぼち、0.66はいまひとつの方に入れることにします。 ransuには0~1の範囲の値しか入っていないので、 さいこー の処理がされる条件としては ransu < 0.33 だけを書けばよいことがわかります。 {{{ if ( ransu < 0.33 ) { unsei = 'さいこー'; } }}} ぼちぼち が処理される条件は 0.33 <= ransu と ransu < 0.66 の2つですが、 最初に判定される条件 ransu < 0.33 が成り立たないときだけについて考えればよいので、0.33 <= ransu は不要で、ransu < 0.66 だけを書けばよいことが分ります。 いまひとつ が処理される条件は 0.66 <= ransu ですが、これは最初と2番目に判定される条件を2つとも満足しないときに対応するので else で良いことも分ります。 プログラムは次のようになります。 {{{#!java 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(); }}} この形の場合分けは良く使われます。 場合分けにおける条件の書き方を、図とプログラムで対応させてみてください。 . {{attachment:baaiwake.png}} ---- === (6)動作するか確かめる === 保存し何度か load を行って、そのたびに違った内容が表示されることを確かめます。 どの場合もちゃんと実行されるか、何度も実行してみましょう。