第2講:もっともシンプルな「時間割表示システム」をつくる(1) |
その3 「授業の情報」を表示するプログラムを実行させる |
作成したプログラムの内容をコンピュータに読みとらせ、その中にある命令を実行させるためには、「コンパイル」という段階を踏む必要があります。「その3」ではこの「コンパイル」とはなんであり、どうやって行うものなのか、そしてその後プログラムを実行するにはどうすればいいのかを説明します。またこれまで作成してきた「授業の情報」を表示するプログラムを、実行された結果をもとに評価します。 |
(1)Javaにおけるプログラムのコンパイル 「コンパイル」とは、作成したプログラムをコンピュータが直接読みとれる形式に翻訳することを指します。コンピュータが読みとれるのは「機械語」と呼ばれる2進数からなる命令です。この「機械語」を人間が直接読み書きするのはあまりにややこしいため、人間が比較的読み書きしやすい「プログラミング言語」で一旦命令を記述した後で「機械語」に翻訳する(注:Javaの場合は正確には機械語ではないが詳しくは後ほど述べます)という方法を採るのです。 Javaの場合、プログラムをコンパイルするためには次のコマンドを使います。 %javac ファイル名(〜.java)
すると、コンピュータはファイル名で指定されたプログラムの内容の翻訳を開始します。この作業はプログラムが(文法的な意味で)正しく書かれていれば必ず完了されますが、もしもプログラム内になんらかの不備があると、その時点で中断されてしまいます。その際に、コマンドラインには「何行目に〜という問題がある」という旨のメッセージ(これをエラーメッセージという)が表示されます。そのような場合には、エラーメッセージを手がかりにプログラム注の不備を手直ししてもう一度ファイルを保存し直し、再びコンパイルします。 初心者のうちによくあるエラーとしては、命令の中に全角文字がまざっている(System.out.println()などの命令はすべて半角文字で書かなければならない)とか、{}や()を閉じ忘れているとか、命令の最後の「;」を忘れているとか、命令のスペルを間違えている等があげられます。また最初に「int x;」や「String y;」といった定義を行い忘れて変数をいきなり使用しているケースなどもよくあります。 さて、問題なくコンパイルが成功する場合、コンパイルのコマンドを入力した後しばらくすると何のメッセージもなくプロンプトが返ってきます。そしてプログラムの書かれた「〜.java」ファイル以外に、自分で作った覚えのない「〜.class」という名前のファイル(「.」より前の「〜」の部分が同じ名前を持つ)ができているはずです。ちなみにこのファイルはプログラムがコンパイルの結果、Java特有の機構である「Virtual Machine」が読みとるための「バイトコード」と呼ばれる記号に変換されたものです。Javaの場合はコンパイルで直接「機械語」に翻訳するのではなく、一旦「バイトコード」のファイルに変換しておき、プログラムの実行時に「Virtual Machine」がその変換済みファイル(〜.class)を「機械語」にその都度翻訳するのです。 こうして「〜.class」ファイルが無事にできたら、プログラムを実行させる準備が整ったことになります。 |
(2)Javaにおけるプログラムの実行 コンパイルが終わったところで、初めてプログラムの命令をコンピュータに読みとらせ実行させる準備が整いました。プログラムを実行するコマンドは次の通りです。もし仮にプログラムのファイル名が「xxx.java」ならば %java xxx と入力します。するとコンピュータはファイル「xxx.java」に記述された命令の実行を始めます。 |
ではさっそく「その2」で作成した「授業の情報」を表示するプログラム「ClassInfo.java」を実行してみましょう。以下に示すのは「コンパイル→実行」に至るコマンドラインの様子です。 %javac -encoding SJIS ClassInfo.java → 文字列「情報処理」がSJISだとして %java ClassInfo 1 情報処理 i308 % プログラムが正しく実行されれば上のような実行結果が得られるはずです。これで基本的な1時限分の「授業の情報」をディスプレイに表示することができました。ここでプログラムの「評価」を行ってみましょう。すると、次の部分に改良の余地があるように思われます。 このプログラムの目的は「時間割という情報をユーザーに提供する」ということでした。ユーザーは基本的にはプログラムの中身を知らないはずです。ところでこの実行結果には、表示される文字がそれぞれ何を示す情報なのかをプログラムの中身を知らない人が知る手がかりは何もありません。これはユーザーにとっては少々不便です。 例えば少なくとも以下のように表示されるならば、それぞれが何を示す情報なのか少しわかりやすくなるはずです。 時限:1 科目名:情報処理 教室名:i308 さて、このように表示を改良するためにはどうすればよいでしょうか。今回学習した内容の復習をかねて改良を行ってみて下さい。 |
リンク: <全体のトップページ> | <第2講のトップページ> |-------------------------|-------------------------| <第2講・その1> <第2講・その2> <第2講・その3>