前回の「“たい焼き”であま〜く理解するJava文法と言語仕様」では、クラス、フィールド、メソッドを学習しました。そして、メソッドがJavaプログラムを動かすための処理であることも覚えてもらったと思います。
今回からはメソッドの内部に踏み込み、Javaの必須知識を習得しつつ、ケータイ(本連載では、携帯電話/PHS/スマートフォンなどの端末をまとめて「ケータイ」と表記します)Javaのポイントも押さえていきます。
今回の本題に入る前に、小さいけれど大事な「コメント」について説明します。コメントというのは、ソースコードにメモや説明などを書くために用意されている機能です。Javaには3種類のコメント形式が用意されています。
コメント部分はプログラムの対象外になります。「ラインコメント」(1行コメント)はコードの説明に、「ブロックコメント」(従来のコメント)は、主にコードをコメントアウトするために、「Javadocコメント」(ドキュメンテーションコメント)はJavadocを記述するために使用される傾向が高いです。
名称/主な呼び方 | コメント範囲 |
---|---|
1行コメント/ラインコメント | 「//」から行末まで |
従来のコメント/ブロックコメント | 「/*」から「*/」まで |
ドキュメンテーションコメント(Javadocコメント) | 「/**」から「*/」まで |
Javadocとは、Java API(ライブラリ)の使用方法が記載されたドキュメントで、最初のうちは必ず見なければなりません。図1のような感じのものです。
連載第1回「あなたの携帯電話でJavaアプリは動きますか?」でインストールしたJDKや連載第2回「キャリアとプロファイルを覚えて『Hello Javaアプリ!』」でインストールしたiDKやWTKにもそれぞれのJavadocが含まれているので、確認してみてください。
表の各コメントの名称はJava言語仕様で規定されている(されていた)正式な名称ですが、一般的ではないような気がします。
筆者は上から「ラインコメント」「ブロックコメント」「Javadocコメント」と呼んでいます。ほかにも「1行コメント」は「C++形式コメント」、「従来のコメント」は「C言語形式コメント」という呼び方をされることもあります。
従来コメントは、この構文がC言語で採用されているため、このように呼ばれます。英語表記では、「Traditional Comment」なので、「伝統的コメント」の方がしっくりくるような気がしますが、いずれにせよJavaからプログラミングを始めた人には「従来の」でも「伝統的」でも分かりづらいですね。
では、今回の本題である、制御構文の説明に入ります。
まずは、ソースコードを見てみましょう。ソースコードは、連載第1回「あなたの携帯電話でJavaアプリは動きますか?」でデモしたテトリスみたいなゲーム「Trimis」のアプレット版のものです。まずは、「Trimisアプレット版」のソースコードをこちらよりダウンロードして、テキストエディタで開いておいてください。
「if」文というのは「もしこれがこうならこうする、そうじゃなかったらそうする」というような条件判定を行うための制御構文です。構文は以下のようになります。
if (条件式) 文 if (条件式) 文1 else 文2 if (条件式A) 文1 else if (条件式B)文2 else 文3 |
「if」が「もし」で、条件式が「これがこうなら」で、文1が「こうする」で、「else」が「そうじゃなかったら」で、文2が「そうする」に当たります。「else」以降は省略可能です。
実際のソースコードではどうでしょうか。345行目から始まるメソッドを見てみましょう。
345 public void keyPressed(KeyEvent e) { |
347行目の「if」文は、その直前にあるコメントのとおり「ブロックが落下中で、かつ直前のキー入力で処理されていないものが2つ未満の場合」に次の処理を行います。349行目の「if」文は「押されたキーが[上]キーなら」という条件判定を行い、そうであれば350行目で、[上]キーが押されたことを覚えておきます。
351行目に「else if」という記述がありますが、これは「そうじゃなくて、こうなら」という意味を持ち、この場合「そうじゃなくて、押されたキーが[下]キーなら」と解釈します。
「if」文によってソースコード上の動きが変わっている様子をEclipseのデバッグ実行で表しているFlash動画(左下のボタンで再生・停止ができます) |
条件式に出てくる「==」は、右辺と左辺が同一であるかどうかを判定する演算子です。
Javaには、たくさんの演算子が用意されています。演算子とは、その名のとおり演算を行うための命令記号で、以下の種類が用意されています。
= > < ! ~ ? : . == <= >= != && || ++ -- + - * / & | ^ % << >> >>> += -= *= /= &= |= ^= %= <<= >>= >>>= instanceof (キャスト) |
演算子についての詳細は、@IT:Javaプログラミング・ワンポイントレクチャー:演算子を参照ください。
「if」文はおそらく最も多用する制御構文です。Trimisのソースコードは372行しかないのに、47個もの「if」文を使用しています。
「switch」文は「これがこの値ならこうで、この値ならこうで、どれでもなければこうする」というような条件判定を行う制御構文です。構文は以下のようになります。
switch (式) { case 値: 文 default: 文 } |
「switch」とその直後の式が「これが」で、「case」とその直後の値が「この値なら」で、その次の文が「こうで」に当たり、「default」が「どれでもなければ」で、その後の文が「こうする」に当たります。「case」ラベルは複数記述することができ、省略することもできます。「default」ラベルは省略可能です。
以下は構文的には正しい「switch」文ですが、何もしません。「switch (式)」の式の部分は、byte、char、short、intのいずれかの返り値でなければなりません。
int foo = 1; |
Trimisでは、「switch」文は使用していないのですが、先ほど紹介した345行目から始まるメソッドの「if」文を「switch」文に置き換えると、以下のようになります。
1 public void keyPressed(KeyEvent e) { |
if文が結構そのままswitch文に置き換わっているのが見て取れると思います。
「break」というキーワードが出てきましたが、この「break」文は、そこで処理を終えることを意味しています。「break」を省略した場合は、次のラベルに処理が落ちていきます(詳細は後述します)。例を見てみましょう。
int foo = 1; |
上記のコードは、以下の出力を行います。
this |
次ページでは、「while」文や「for」文などの処理を繰り返すための制御文について説明します。
プログラムが期待どおりに動作しない原因を「バグ」と呼びます。「バグ」とはプログラムコードに潜む“誤り”のことですが、この誤りを探すために埋め込む出力文を「デバッグ文」と呼びます。また、動作を確認するための出力文も総じて「デバッグ文」と呼びます。
Javaにおけるデバッグ文の代表格は「System.out.println(引数)」です。これはSystemクラスのoutフィールドのprintlnメソッドを呼び出し、標準出力に引数を出力する、Java入門者が確実に覚えなければならないメソッドです。
ただし、ケータイ本体では標準出力によるデバッグ文は確認できないので注意してください(標準出力がないためです)。ケータイでは、標準出力以外の方法でデバッグ出力を確認しますが、それはまた別の機会に紹介します。
Copyright © ITmedia, Inc. All Rights Reserved.