<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>プログラムの作り方</title><revhistory><revision><revnumber>4</revnumber><date>2010-02-19 06:28:55</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>3</revnumber><date>2010-02-19 06:28:31</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>2</revnumber><date>2010-02-19 06:27:50</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>1</revnumber><date>2010-02-19 06:20:21</date><authorinitials>masahiko</authorinitials></revision></revhistory></articleinfo><section><title>プログラムの作り方</title><para>プログラムはどのような手順で作るのか、例をあげて説明します。 </para><!--rule (<hr>) is not applicable to DocBook--><section><title>（１）どんなプログラムを作るか決める</title><para>おみくじプログラムを作ることにします。 実行されるごとに、いくつかの異なったメッセージがランダムに表示されるものです。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>（２）そのプログラムの使い方を決める</title><itemizedlist><listitem override="none"><screen><![CDATA[ js> load('...')]]></screen></listitem></itemizedlist><para>を行ったら </para><itemizedlist><listitem override="none"><screen><![CDATA[ 今日の運勢は○○です]]></screen></listitem></itemizedlist><para>などと表示されることにします。 </para><para>ここでファイル名も決めておきます。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>（３）プログラム全体の構成を決める</title><para>関数を使って書くことにします。 関数名は omikuji にしました。引数は必要ないので名前の後ろは括弧だけです。 printは関数の中で行う書き方を使うことにします。（値を返し、関数を呼び出す側でprintする方法もあります。） loadしたら実行されるように、関数定義のあとに関数呼び出しを書きます。 </para><para>すると、全体の構成は次のようになります。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><![CDATA[ ]]><lineannotation><![CDATA[/* コメント */]]></lineannotation>
<![CDATA[ ]]><methodname><![CDATA[function]]></methodname><![CDATA[ ]]><methodname><![CDATA[omikuji]]></methodname><![CDATA[() {]]>
<![CDATA[     ...]]>
<![CDATA[     ]]><methodname><![CDATA[print]]></methodname><![CDATA[(...);]]>
<![CDATA[     ]]><token><![CDATA[return]]></token><![CDATA[;]]>
<![CDATA[ }]]>
<![CDATA[ ]]>
<![CDATA[ ]]><methodname><![CDATA[omikuji]]></methodname><![CDATA[();]]>
</programlisting></listitem></itemizedlist><para>テキストエディタを使ってここまで入力し、先に決めたファイル名で保存します。 この時点でコメントも書いておきます。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>（４）手順を考える</title><para>関数内で行うことがらを、行う順に書き出してみます。 </para><itemizedlist><listitem override="none"><para>１）乱数を発生させる </para></listitem><listitem override="none"><para>２）乱数の値によって場合分けし、それぞれのおみくじの内容を決める </para></listitem><listitem override="none"><para>３）表示する </para></listitem></itemizedlist><para>以上３つのことを行うプログラムを書けばよいことがわかります。 </para><para>３）はprint文で書けます。 </para><para>２）はif文を使って場合分けする書き方を使えばよい。 </para><para>１）は乱数を発生させる関数を使います。処理系で用意されています。 </para><para>Math.random() はこの関数を呼び出すたびに０～１の範囲の数をランダムに返します。 この値を変数 ransu に覚えておき、ransuの値を使って場合分けすることにします。 </para><para>２行追加し、このようになります。コメントは省略しています。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><![CDATA[ ]]><methodname><![CDATA[function]]></methodname><![CDATA[ ]]><methodname><![CDATA[omikuji]]></methodname><![CDATA[() {]]>
<![CDATA[     ]]><methodname><![CDATA[var]]></methodname><![CDATA[ ]]><methodname><![CDATA[ransu]]></methodname><![CDATA[;]]>
<![CDATA[     ]]><methodname><![CDATA[ransu]]></methodname><![CDATA[ = ]]><methodname><![CDATA[Math]]></methodname><![CDATA[.]]><methodname><![CDATA[random]]></methodname><![CDATA[();]]>
<![CDATA[     ...]]>
<![CDATA[     ]]><methodname><![CDATA[print]]></methodname><![CDATA[(...);]]>
<![CDATA[     ]]><token><![CDATA[return]]></token><![CDATA[;]]>
<![CDATA[ }]]>
<![CDATA[ ]]>
<![CDATA[ ]]><methodname><![CDATA[omikuji]]></methodname><![CDATA[();]]>
</programlisting></listitem></itemizedlist><para>... の部分が場合分けの処理になります。 場合分けごとに、おみくじの内容を変数の値として覚えさせることにします。 </para><para>変数の値としては数値だけでなく、文字列も使えます。 例えば </para><itemizedlist><listitem override="none"><screen><![CDATA[ unsei = '大吉';]]></screen></listitem></itemizedlist><para>を行った後で </para><itemizedlist><listitem override="none"><screen><![CDATA[ print ( '今日の運勢は', unsei, 'です' );]]></screen></listitem></itemizedlist><para>を実行すると </para><itemizedlist><listitem override="none"><screen><![CDATA[ 今日の運勢は大吉です]]></screen></listitem></itemizedlist><para>と表示されます。 </para><para>さらに２行修正しました。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><![CDATA[ ]]><methodname><![CDATA[function]]></methodname><![CDATA[ ]]><methodname><![CDATA[omikuji]]></methodname><![CDATA[() {]]>
<![CDATA[     ]]><methodname><![CDATA[var]]></methodname><![CDATA[ ]]><methodname><![CDATA[ransu]]></methodname><![CDATA[, ]]><methodname><![CDATA[unsei]]></methodname><![CDATA[;]]>
<![CDATA[     ]]><methodname><![CDATA[ransu]]></methodname><![CDATA[ = ]]><methodname><![CDATA[Math]]></methodname><![CDATA[.]]><methodname><![CDATA[random]]></methodname><![CDATA[();]]>
<![CDATA[     ...]]>
<![CDATA[     ]]><methodname><![CDATA[print]]></methodname><![CDATA[ ( ']]><methodname><![CDATA[今日の運勢は]]></methodname><![CDATA[', ]]><methodname><![CDATA[unsei]]></methodname><![CDATA[, ']]><methodname><![CDATA[です]]></methodname><![CDATA[' );]]>
<![CDATA[     ]]><token><![CDATA[return]]></token><![CDATA[;]]>
<![CDATA[ }]]>
<![CDATA[ ]]>
<![CDATA[ ]]><methodname><![CDATA[omikuji]]></methodname><![CDATA[();]]>
</programlisting></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>（５）プログラムの詳細部分を書く</title><para>いくつの場合に分けるか考えます。 </para><itemizedlist><listitem override="none"><para>さいこー </para></listitem><listitem override="none"><para>ぼちぼち </para></listitem><listitem override="none"><para>いまひとつ </para></listitem></itemizedlist><para>の３つの場合に分けるときの書き方は次のようになります。 </para><itemizedlist><listitem override="none"><screen><![CDATA[ if (...) {
     unsei = 'さいこー';
 }
 else if (...) {
     unsei = 'ぼちぼち';
 }
 else {
     unsei = 'いまひとつ';
 }]]></screen></listitem></itemizedlist><para>条件を書けば完成です。 ransu には０～１の範囲の値が入っているので、これを３つに分けて </para><itemizedlist><listitem override="none"><para>０～０．３３ のとき さいこー </para></listitem><listitem override="none"><para>０．３３～０．６６ のとき ぼちぼち </para></listitem><listitem override="none"><para>０．６６～１ のとき いまひとつ </para></listitem></itemizedlist><para>にすることにします。 ０．３３と０．６６は２箇所に現れていますが、０．３３はぼちぼち、０．６６はいまひとつの方に入れることにします。 </para><para>ransuには０～１の範囲の値しか入っていないので、 さいこー の処理がされる条件としては ransu &lt; 0.33 だけを書けばよいことがわかります。 </para><itemizedlist><listitem override="none"><screen><![CDATA[ if ( ransu < 0.33 ) {
     unsei = 'さいこー';
 }]]></screen></listitem></itemizedlist><para>ぼちぼち が処理される条件は 0.33 &lt;= ransu と ransu &lt; 0.66 の２つですが、 最初に判定される条件 ransu &lt; 0.33 が成り立たないときだけについて考えればよいので、0.33 &lt;= ransu は不要で、ransu &lt; 0.66 だけを書けばよいことが分ります。 </para><para>いまひとつ が処理される条件は 0.66 &lt;= ransu ですが、これは最初と２番目に判定される条件を２つとも満足しないときに対応するので else で良いことも分ります。 </para><para>プログラムは次のようになります。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><![CDATA[ ]]><methodname><![CDATA[function]]></methodname><![CDATA[ ]]><methodname><![CDATA[omikuji]]></methodname><![CDATA[() {]]>
<![CDATA[     ]]><methodname><![CDATA[var]]></methodname><![CDATA[ ]]><methodname><![CDATA[ransu]]></methodname><![CDATA[, ]]><methodname><![CDATA[unsei]]></methodname><![CDATA[;]]>
<![CDATA[     ]]><methodname><![CDATA[ransu]]></methodname><![CDATA[ = ]]><methodname><![CDATA[Math]]></methodname><![CDATA[.]]><methodname><![CDATA[random]]></methodname><![CDATA[();]]>
<![CDATA[     ]]><token><![CDATA[if]]></token><![CDATA[ ( ]]><methodname><![CDATA[ransu]]></methodname><![CDATA[ < 0.33 ) {]]>
<![CDATA[         ]]><methodname><![CDATA[unsei]]></methodname><![CDATA[ = ']]><methodname><![CDATA[さいこー]]></methodname><![CDATA[';]]>
<![CDATA[     }]]>
<![CDATA[     ]]><token><![CDATA[else]]></token><![CDATA[ ]]><token><![CDATA[if]]></token><![CDATA[ ( ]]><methodname><![CDATA[ransu]]></methodname><![CDATA[ < 0.66 ) {]]>
<![CDATA[         ]]><methodname><![CDATA[unsei]]></methodname><![CDATA[ = ']]><methodname><![CDATA[ぼちぼち]]></methodname><![CDATA[';]]>
<![CDATA[     }]]>
<![CDATA[     ]]><token><![CDATA[else]]></token><![CDATA[ {]]>
<![CDATA[         ]]><methodname><![CDATA[unsei]]></methodname><![CDATA[ = ']]><methodname><![CDATA[いまひとつ]]></methodname><![CDATA[';]]>
<![CDATA[     }]]>
<![CDATA[     ]]><methodname><![CDATA[print]]></methodname><![CDATA[ ( ']]><methodname><![CDATA[今日の運勢は]]></methodname><![CDATA[', ]]><methodname><![CDATA[unsei]]></methodname><![CDATA[, ']]><methodname><![CDATA[です]]></methodname><![CDATA[' );]]>
<![CDATA[     ]]><token><![CDATA[return]]></token><![CDATA[;]]>
<![CDATA[ }]]>
<![CDATA[ ]]>
<![CDATA[ ]]><methodname><![CDATA[omikuji]]></methodname><![CDATA[();]]>
</programlisting></listitem></itemizedlist><para>この形の場合分けは良く使われます。 場合分けにおける条件の書き方を、図とプログラムで対応させてみてください。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9?action=AttachFile&amp;do=get&amp;target=baaiwake.png"/></imageobject><textobject><phrase>baaiwake.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>（６）動作するか確かめる</title><para>保存し何度か load を行って、そのたびに違った内容が表示されることを確かめます。 どの場合もちゃんと実行されるか、何度も実行してみましょう。 </para></section></section></article>