== Rhinoのプログラム == コンピュータと会話するときに1つずつ質問を入力しては答を得るのではなく、いくつかまとめて質問できると便利ですね。 質問内容をファイルに記述しておき、そのファイルを読んで処理するように指示できます。 質問(処理)内容を順に記述したものをスクリプトまたは'''プログラム'''と呼びます。 ---- === プログラムと文 === プログラムは日本語の文章に対応します。 文章は文が集まってできています。 それぞれの文の意味と、文の順番で内容が決まります。 プログラムも文の集まりです。 それぞれの文はなんらかの処理を表しており、文の並び方で手順を表します。 日本語で説明を書くときと同様に、行われる順に書いていきます。 . print文や代入文の終わりには ; (セミコロン)を書きます。 . print文や代入文は1行に1つ書くようにしましょう。 演習で使用している Rhino では、自動的に「;」を補ってくれる機能があります。(いつも正しく補われるかどうかは分かりません) プログラムの間違いを少なくするためには、補完機能にたよらず、記述するようにしましょう。 ---- === プログラムの構成要素 === 日本語の文章は単語と、。「」などの記号を並べて書かれます。 プログラムは . 名前 . 記号 . リテラル を並べて記述されます。 '''名前'''は値を記憶、参照するための変数などを表すのに使います。 '''記号'''は = + - * / など、それぞれに意味があります。 '''リテラル'''は値を直接記述したものです。 数値リテラル . 数値は123, 5.67, -89, 0.54 のように記述しました。 . 1番目の例は10進数でヒャクニジュウサンという値を表します。 文字リテラル . 文字の並びそのものをデータ(値)として扱いたいことがあります。 . このときは '(クオート)または"(ダブルクオート)で挟んで記述します。 . '123' と書くと文字1、文字2、文字3がこの順に並んだものを表します。 ---- === 名前の付け方 === 英数字をならべてつける。 . 先頭は英字。 . 大文字と小文字は区別される。 . 普段は小文字を使う。 ---- === 文 === プログラムは文の集まりです。 これまでに出てきた文は次の2種類です。 代入文 . 式の値を計算し、名前に対応させます(代入という)。 . {{attachment:namae2.png}} print文 . 式の値を計算し、表示します。 . {{attachment:print1.png}} ---- === 注釈(コメント) === プログラム内に注釈(コメント)を書くことができます。 注釈はプログラムの実行には影響がありません。 プログラムの説明や注意事項など、そのプログラムに関連したことがらや、メモなどを書くのに使います。 ECMAscriptでは2種類の書き方があります。 空白を入れられる部分にはどこでもコメントを挿入することができますが、文の途中に入れることは普通行いません。 例にしめす書き方が普通です。 1) /* から */ まで . /* と */ で挟んだ部分が注釈となります。 . 複数行にわたってもかまいません。 {{{ /* 三平方の定理を使って 高さを求める */ h = Math.sqrt( 6*6 - 2*2 ); }}} 2) // から行末まで . // からその行の終わりまでが注釈となります。 {{{ a = 3 * 5 / 2; // 上の三角部分 }}} ---- === プログラムは美しく書く === 文章を書くときと同じで、 プログラムは美しく書くように心がけていれば多くのミスは防ぐことができます。 また、あとで見たときにすぐに理解できます。 '''セミコロンをわすれない''' . これまでに学んだ「代入文」、「print文」はいずれも「;(セミコロン)」で終わります。 . 書き忘れないように気をつけましょう。 . 省略しても動作することが多いので、これまで忘れているかもしれません。 . 省略したときに正しく動作しないこともあります。注意しましょう。 '''空白をうまくつかう''' 文の前後や、= + - * / % ; などの記号の前後には空白を入れることができます。 空白を入れても動作は変わりません。 代入文の=の両側に空白を入れると読みやすくなります。 {{{ a=b+3*c; a = b+3*c; }}} 計算式で括弧を何重にも使っているときは、括弧の対応がわかるように空白を入れるとよい。 {{{ kotae = (b+c)/((a/2)*(a/2)); kotae = (b+c)/( (a/2)*(a/2) ); }}} print文でいくつかの式をカンマで区切って書くときは、カンマの後ろに空白を入れると読みやすい。 {{{ print(' 答え',kotae); print(' 答え', kotae); }}} '''空白行を使って固まりにわける''' . 空白の行をはさむこともできます。 . いくつかの代入文で1つのまとまった計算をしているときは、それらの代入文の間には空白行を入れず、前後に1行ずつ空白行を入れると分りやすくなります。 '''名前は分りやすくつける''' 名前は計算した内容を表すようにつけましょう。 migi, hidari, menseki, kotae, takasa のように簡単な名前をつけるのがよい。 同じような内容の名前がいくつか必要なときは、haba1, haba2 のように後ろに数字をつけたりします。 途中の計算だけで使う場合には、a, b, c などの簡単な名前でもよい。 '''コメントをつける''' 必要に応じ、処理内容をコメントとしてつけておくと良い。 プログラムの先頭には . 何をするプログラムか . 作成者 . 作成日 をコメントとして書いておきましょう。 ---- === 例 === 面積を求める問題はつぎのようでした。 . {{attachment:menseki3a.png}} 赤で示した長方形を考え . {{attachment:menseki3b.png}} a - b - c + d として計算することにします。 . 長方形 a の面積は (8 + 6) * (6 + 6 + 5) . 長方形 b の面積は 8 * 5 . 長方形 c の面積は 3 * 4 . 半円 d の面積は 6 * 6 * 3.1416 / 2 で求めることができます。 この計算は式のとおりに . (8 + 6) * (6 + 6 + 5) . 8 * 5 . 3 * 4 . 6 * 6 * 3.1416 / 2 と書けば表すことができますが、計算結果をあとで利用するためには「名前」をつけておく必要があります。 これには「代入文」を使います。 名前は上の図と同じ a, b, c, d を使うことにすると {{{ a = (8 + 6) * (6 + 6 + 5); b = 8 * 5; c = 3 * 4; d = 6 * 6 * 3.1416 / 2; }}} と書けます。 a, b, c, d の値が分かっていれば、面積は a - b - c + d で表せます。 面積にも menseki と「名前」をつけることにすると、この計算は {{{ menseki = a - b - c + d; }}} という代入文になります。 最後に、結果を表示するための print文を追加すればプログラムの完成です。 {{{#!java a = (8 + 6) * (6 + 6 + 5); b = 8 * 5; c = 3 * 4; d = 6 * 6 * 3.1416 / 2; menseki = a - b - c + d; print ( '面積は', menseki, 'です' ); }}} '''プログラムは1行目から順に実行されます。''' . 1行目から4行目でa,b,c,dの値が計算され、記憶されます。 . 5行目ではそれらの値を用いて面積を計算し、mensekiに記憶します。 . 6行目では求まった(記憶されている)値を表示します。 1~4行目の順序は変わってもかまいませんが、 その後の5行目、6行目はこの順でないと困ります。 実際にエディタを使ってプログラムを入力し、load命令を使って実行して確かめましょう。