<?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>Rhinoのプログラム</title><revhistory><revision><revnumber>14</revnumber><date>2011-12-19 07:16:39</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>13</revnumber><date>2011-12-19 07:07:01</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>12</revnumber><date>2011-12-19 07:06:40</date><authorinitials>masahiko</authorinitials><revremark>名前を'Rhinoのプログラムの構成'から変更。</revremark></revision><revision><revnumber>11</revnumber><date>2011-12-19 05:12:38</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>10</revnumber><date>2011-12-19 05:01:16</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>9</revnumber><date>2011-12-19 04:59:08</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>8</revnumber><date>2011-12-19 04:58:48</date><authorinitials>masahiko</authorinitials><revremark>名前を'Rhinoのプログラムの書き方'から変更。</revremark></revision><revision><revnumber>7</revnumber><date>2011-12-16 05:13:55</date><authorinitials>masahiko</authorinitials><revremark>名前を'Rhinoのプログラム'から変更。</revremark></revision><revision><revnumber>6</revnumber><date>2010-02-19 02:26:35</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>5</revnumber><date>2010-02-19 02:17:47</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>4</revnumber><date>2010-02-19 02:11:54</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>3</revnumber><date>2010-02-19 02:08:21</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>2</revnumber><date>2010-02-19 02:02:21</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>1</revnumber><date>2010-02-19 01:54:19</date><authorinitials>masahiko</authorinitials></revision></revhistory></articleinfo><section><title>Rhinoのプログラム</title><para>コンピュータと会話するときに１つずつ質問を入力しては答を得るのではなく、いくつかまとめて質問できると便利ですね。 質問内容をファイルに記述しておき、そのファイルを読んで処理するように指示できます。 質問（処理）内容を順に記述したものをスクリプトまたは<emphasis role="strong">プログラム</emphasis>と呼びます。 </para><!--rule (<hr>) is not applicable to DocBook--><section><title>プログラムと文</title><para>プログラムは日本語の文章に対応します。 文章は文が集まってできています。 それぞれの文の意味と、文の順番で内容が決まります。 </para><para>プログラムも文の集まりです。 それぞれの文はなんらかの処理を表しており、文の並び方で手順を表します。 日本語で説明を書くときと同様に、行われる順に書いていきます。 </para><itemizedlist><listitem override="none"><para>print文や代入文の終わりには ; (セミコロン)を書きます。 </para></listitem><listitem override="none"><para>print文や代入文は１行に１つ書くようにしましょう。 </para></listitem></itemizedlist><para>演習で使用している Rhino では、自動的に「；」を補ってくれる機能があります。（いつも正しく補われるかどうかは分かりません） プログラムの間違いを少なくするためには、補完機能にたよらず、記述するようにしましょう。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>プログラムの構成要素</title><para>日本語の文章は単語と、。「」などの記号を並べて書かれます。 </para><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><emphasis role="strong">名前</emphasis>は値を記憶、参照するための変数などを表すのに使います。 </para><para><emphasis role="strong">記号</emphasis>は = + - * / など、それぞれに意味があります。 </para><para><emphasis role="strong">リテラル</emphasis>は値を直接記述したものです。 </para><para>数値リテラル </para><itemizedlist><listitem override="none"><para>数値は123, 5.67, -89, 0.54 のように記述しました。 </para></listitem><listitem override="none"><para>１番目の例は１０進数でヒャクニジュウサンという値を表します。 </para></listitem></itemizedlist><para>文字リテラル </para><itemizedlist><listitem override="none"><para>文字の並びそのものをデータ（値）として扱いたいことがあります。 </para></listitem><listitem override="none"><para>このときは '(クオート)または&quot;(ダブルクオート)で挟んで記述します。 </para></listitem><listitem override="none"><para>'123' と書くと文字1、文字2、文字3がこの順に並んだものを表します。 </para></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><!--rule (<hr>) is not applicable to DocBook--></section><section><title>文</title><para>プログラムは文の集まりです。 これまでに出てきた文は次の２種類です。 </para><para>代入文 </para><itemizedlist><listitem override="none"><para>式の値を計算し、名前に対応させます（代入という）。 </para></listitem><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/Rhino%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0?action=AttachFile&amp;do=get&amp;target=namae2.png"/></imageobject><textobject><phrase>namae2.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>print文 </para><itemizedlist><listitem override="none"><para>式の値を計算し、表示します。 </para></listitem><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/Rhino%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0?action=AttachFile&amp;do=get&amp;target=print1.png"/></imageobject><textobject><phrase>print1.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>注釈（コメント）</title><para>プログラム内に注釈（コメント）を書くことができます。 注釈はプログラムの実行には影響がありません。 プログラムの説明や注意事項など、そのプログラムに関連したことがらや、メモなどを書くのに使います。 </para><para>ECMAscriptでは２種類の書き方があります。 </para><para>空白を入れられる部分にはどこでもコメントを挿入することができますが、文の途中に入れることは普通行いません。 例にしめす書き方が普通です。 </para><para>１） <remark>から</remark> まで </para><itemizedlist><listitem override="none"><para><remark>と</remark> で挟んだ部分が注釈となります。 </para></listitem><listitem override="none"><para>複数行にわたってもかまいません。 </para><screen><![CDATA[/* 三平方の定理を使って
高さを求める */
h = Math.sqrt( 6*6 - 2*2 );]]></screen></listitem></itemizedlist><para>２） // から行末まで </para><itemizedlist><listitem override="none"><para>// からその行の終わりまでが注釈となります。 </para><screen><![CDATA[a = 3 * 5 / 2; // 上の三角部分]]></screen></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>プログラムは美しく書く</title><para>文章を書くときと同じで、 プログラムは美しく書くように心がけていれば多くのミスは防ぐことができます。 また、あとで見たときにすぐに理解できます。 </para><para><emphasis role="strong">セミコロンをわすれない</emphasis> </para><itemizedlist><listitem override="none"><para>これまでに学んだ「代入文」、「print文」はいずれも「；（セミコロン）」で終わります。 </para></listitem><listitem override="none"><para>書き忘れないように気をつけましょう。 </para></listitem><listitem override="none"><para>省略しても動作することが多いので、これまで忘れているかもしれません。 </para></listitem><listitem override="none"><para>省略したときに正しく動作しないこともあります。注意しましょう。 </para></listitem></itemizedlist><para><emphasis role="strong">空白をうまくつかう</emphasis> </para><para>文の前後や、= + - * / % ; などの記号の前後には空白を入れることができます。 空白を入れても動作は変わりません。 </para><para>代入文の＝の両側に空白を入れると読みやすくなります。 </para><itemizedlist><listitem override="none"><screen><![CDATA[a=b+3*c;
a = b+3*c;]]></screen></listitem></itemizedlist><para>計算式で括弧を何重にも使っているときは、括弧の対応がわかるように空白を入れるとよい。 </para><itemizedlist><listitem override="none"><screen><![CDATA[kotae = (b+c)/((a/2)*(a/2));
kotae = (b+c)/( (a/2)*(a/2) );]]></screen></listitem></itemizedlist><para>print文でいくつかの式をカンマで区切って書くときは、カンマの後ろに空白を入れると読みやすい。 </para><itemizedlist><listitem override="none"><screen><![CDATA[print(' 答え',kotae);
print(' 答え', kotae);]]></screen></listitem></itemizedlist><para><emphasis role="strong">空白行を使って固まりにわける</emphasis> </para><itemizedlist><listitem override="none"><para>空白の行をはさむこともできます。 </para></listitem><listitem override="none"><para>いくつかの代入文で１つのまとまった計算をしているときは、それらの代入文の間には空白行を入れず、前後に１行ずつ空白行を入れると分りやすくなります。 </para></listitem></itemizedlist><para><emphasis role="strong">名前は分りやすくつける</emphasis> </para><para>名前は計算した内容を表すようにつけましょう。 migi, hidari, menseki, kotae, takasa のように簡単な名前をつけるのがよい。 同じような内容の名前がいくつか必要なときは、haba1, haba2 のように後ろに数字をつけたりします。 </para><para>途中の計算だけで使う場合には、a, b, c などの簡単な名前でもよい。 </para><para><emphasis role="strong">コメントをつける</emphasis> </para><para>必要に応じ、処理内容をコメントとしてつけておくと良い。 </para><para>プログラムの先頭には </para><itemizedlist><listitem override="none"><para>何をするプログラムか </para></listitem><listitem override="none"><para>作成者 </para></listitem><listitem override="none"><para>作成日 </para></listitem></itemizedlist><para>をコメントとして書いておきましょう。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>例</title><para>面積を求める問題はつぎのようでした。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/Rhino%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0?action=AttachFile&amp;do=get&amp;target=menseki3a.png"/></imageobject><textobject><phrase>menseki3a.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>赤で示した長方形を考え </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/Rhino%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0?action=AttachFile&amp;do=get&amp;target=menseki3b.png"/></imageobject><textobject><phrase>menseki3b.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>a - b - c + d として計算することにします。 </para><itemizedlist><listitem override="none"><para>長方形 a の面積は (8 + 6) * (6 + 6 + 5) </para></listitem><listitem override="none"><para>長方形 b の面積は 8 * 5 </para></listitem><listitem override="none"><para>長方形 c の面積は 3 * 4 </para></listitem><listitem override="none"><para>半円 d の面積は 6 * 6 * 3.1416 / 2 </para></listitem></itemizedlist><para>で求めることができます。 </para><para>この計算は式のとおりに </para><itemizedlist><listitem override="none"><para>(8 + 6) * (6 + 6 + 5) </para></listitem><listitem override="none"><para>8 * 5 </para></listitem><listitem override="none"><para>3 * 4 </para></listitem><listitem override="none"><para>6 * 6 * 3.1416 / 2 </para></listitem></itemizedlist><para>と書けば表すことができますが、計算結果をあとで利用するためには「名前」をつけておく必要があります。 </para><para>これには「代入文」を使います。 名前は上の図と同じ a, b, c, d を使うことにすると </para><itemizedlist><listitem override="none"><screen><![CDATA[ a = (8 + 6) * (6 + 6 + 5);
 b = 8 * 5;
 c = 3 * 4;
 d = 6 * 6 * 3.1416 / 2;]]></screen></listitem></itemizedlist><para>と書けます。 </para><para>a, b, c, d の値が分かっていれば、面積は a - b - c + d で表せます。 面積にも menseki と「名前」をつけることにすると、この計算は </para><itemizedlist><listitem override="none"><screen><![CDATA[ menseki = a - b - c + d;]]></screen></listitem></itemizedlist><para>という代入文になります。 </para><para>最後に、結果を表示するための print文を追加すればプログラムの完成です。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><![CDATA[ ]]><methodname><![CDATA[a]]></methodname><![CDATA[ = (8 + 6) * (6 + 6 + 5);]]>
<![CDATA[ ]]><methodname><![CDATA[b]]></methodname><![CDATA[ = 8 * 5;]]>
<![CDATA[ ]]><methodname><![CDATA[c]]></methodname><![CDATA[ = 3 * 4;]]>
<![CDATA[ ]]><methodname><![CDATA[d]]></methodname><![CDATA[ = 6 * 6 * 3.1416 / 2;]]>
<![CDATA[ ]]><methodname><![CDATA[menseki]]></methodname><![CDATA[ = ]]><methodname><![CDATA[a]]></methodname><![CDATA[ - ]]><methodname><![CDATA[b]]></methodname><![CDATA[ - ]]><methodname><![CDATA[c]]></methodname><![CDATA[ + ]]><methodname><![CDATA[d]]></methodname><![CDATA[;]]>
<![CDATA[ ]]><methodname><![CDATA[print]]></methodname><![CDATA[ ( ']]><methodname><![CDATA[面積は]]></methodname><![CDATA[', ]]><methodname><![CDATA[menseki]]></methodname><![CDATA[, ']]><methodname><![CDATA[です]]></methodname><![CDATA[' );]]>
</programlisting></listitem></itemizedlist><para><emphasis role="strong">プログラムは１行目から順に実行されます。</emphasis> </para><itemizedlist><listitem override="none"><para>１行目から４行目でa,b,c,dの値が計算され、記憶されます。 </para></listitem><listitem override="none"><para>５行目ではそれらの値を用いて面積を計算し、mensekiに記憶します。 </para></listitem><listitem override="none"><para>６行目では求まった（記憶されている）値を表示します。 </para></listitem></itemizedlist><para>１～４行目の順序は変わってもかまいませんが、 その後の５行目、６行目はこの順でないと困ります。 </para><para>実際にエディタを使ってプログラムを入力し、load命令を使って実行して確かめましょう。 </para></section></section></article>