プログラムを理解する


プログラムの上達には, サンプルプログラムを入力して実行するのが早道と は言え, 意味も知っておく必要がある. 先ほどのプログラムを例に Java のプ ログラムの読み方を説明する. Javaのプログラムは, クラス(class)の定義の集合である.
class Test {
  public static void main(String[] argv){
    System.out.println("Hello World");
    System.out.println("Hello Again");
  }
}
ファイルのトップレベルのclassの後に定義しようとするクラス名を書き,ク ラスの中身の定義は最初の行の'{'と対応する最後の '}'の間に記述する. 今 のところは、ファイル名のうちの「.java」を取り除いた部分と対応している ことだけに注目するだけで良い。
クラスはデータフィールド(data field), メソッド(method)の定義の集合で ある. クラス Test の定義では main という名前のメソッドだけを含んでいる. static, void, String[]などの意味は, 以下の通りだが,今見てもわからない と思う.後から読み返すと理解できるはずである.
static
main という名前のメソッドが,静的(static)なメソッド(オブジェクト を介さなくても使えるメソッド)だということを示す.
void
英和辞典を引くと,「空,空虚」などの訳が載っているが,ここでは main メソッドが値を返さないことを示す.
String[]
メソッドの引数(「ひきすう」と読む)のクラスを定義している.String というクラスは文字列を表現するためにシステムに用意されたクラスで,説明 は こちら . [] をつけると,引数がString クラスの要素ではなくString ク ラスの配列の要素であることを示す.
「クラス」,「データフィールド」,「メソッド」,「引数」など未知の単 語がたくさん出てくるので,このあたりで頭がショートしてしまう人もいるか もしれない.ある単語を説明するために別の未知単語を用いるので,説明になっ ていないのは確かなのだが,プログラムの実行に関するイメージをつかまない うちに,説明するのも難しい(プログラム言語を数学的に定義しようという試 みもあるが,そのための道具の使い方を覚えるだけで1学期の講義では足りな い).

後でオブジェクト型の説明をするまでは,1つのクラスからなり,mainと いうメソッドしかないプログラムのみを扱うので,それまではそれぞれの用語 が使われた時に,プログラムの字面のどの部分に対応するかだけを覚えるだけ で良い.


上のプログラムをjavacコマンドを使って,コンパイルすると「クラス名. class」というファイルが作られる.コンパイルしたプログラムは,
java クラス名
とすると,そのクラスの定義中の main という名前のメソッド(名前だけでな く,型定義も一致する必要はあるが)から実行を開始する.

mainのメソッドの定義は 2行目の'{'と5行目の'}'の間の2行である.

    System.out.println("Hello World");
という文と,
    System.out.println("Hello Again");
という2つの文からなる. System.out.printlnというのは「Systemというクラ スのstatic データである out というPrintStreamのprintlnというメソッド」 というものを意味するが, 今のところは一まとまりで「文字列(String)を改行 つきで出力する命令」と考えて良い. 後で説明する制御文などでない普通の文 の並びは上から順に実行されるので,
Hello World
Hello Again
のように2つの文が順に実行されるのである. より詳しい説明を見たい人は, こちら にSystemクラスの説明がある.
ここまでの例では,ファイル名を「クラス名.java」としなくても,コンパ イル実行できたが,後で出てくる「publicなクラス」の場合にはファイル名と クラス名の関連付けがなされるので,ファイル名を「クラス名.java」とする 習慣をつけておくと良い.

コメント(注釈)

プログラムは,コンパイラが処理して実行するためのものだが,他の人が読 むことも考えて書かなければいけない.読みやすいプログラムをどうやって書 くかは,奥が深い問題でこれに関連したソフトウェア工学という学問分野があ る位であるが,最初から気をつけるのは以下のような点だろう.

先ほどのプログラムにしつこいコメントを加えたものが以下のプログラムであ る.コンパイル結果,実行結果はこれまでと変わらない.

class Test { // クラス Test の定義の開始
    // メソッド main の定義の開始
  public static void main(String[] argv){
      // "Hello World"という文字列を改行付で出力する.
    System.out.println("Hello World");
      // "Hello Again"という文字列を改行付で出力する.
    System.out.println("Hello Again");
  } // メソッド main の定義の開始
}// クラス Test の定義の終了

次へ進む
ktanaka at ecc.u-tokyo.ac.jp