if else, try catch

Since 2003.04.15  

プログラムの説明

説明のために無理やり if文を入れたようにも見えるプログラムですが、説明に入ります。
まず、標題以外の部分に触れておきます。

10 import java.lang.*;
java.lang.IntegerparseInt(String s, int radix)
を使うので追加しています。
14 Color suncolor = new Color(255, 0, 0);
15 Color backcolor = new Color(255, 255, 255);
当初の完成型と同じに戻しました。
宣言と初期化を一文で行っています。
29 Color color;
31〜34行目で使用するので、ここで宣言しています。

if else 文

プログラムの実行は、条件によって処理を変えたり、同じ処理を何度も繰り返すループ構造をとることが多くあります。
このような処理を記述するために、条件節やループを持ち、内部に複数の単独文を含む「フロー制御文」が、ほとんどの言語では定められています。
その代表格がこのif else 文です。
その構文は、次のようになります。

if (条件式1) {
    条件式1が真のとき実行する文の並び
}
else if (条件式2) {
    条件式2が真のとき実行する文の並び
}
else {
    上記条件式がいずれも偽のとき実行する文の並び
}

else if 文は、条件が1つのときは存在しません。条件が3以上のときは、else if 文を複数並べることができます。else 文は、実行させる文が無いときは、全体を省略可能です。
条件式は、「A 比較演算子 B」、「boolean型データ」、「boolean型の戻り値をもつメソッド呼び出し」のいずれか、またはその論理演算子による連結になります。
「boolean型データ」というのは、「true」「false」いずれかの値を持つデータ型です。
比較演算子は7つありますが、比較できる対象が異なります。

演算子演算内容左辺右辺
<より小さい数値数値
<=以下数値数値
>より大きい数値数値
>=以上数値数値
==等しい基本型基本型
!=等しくない基本型基本型
==等しい参照参照
!=等しくない参照参照
instanceof型の比較参照

このプログラムでは、条件式は1つで「color に有効な参照が入っていたら」、
実行文は、「color を backcolor に代入する」となります。
条件を満たさないときは、15 行目の「Color backcolor = new Color(255, 255, 255);」が、そのまま使われます。

33 if(color != null) {
34     backcolor = color;
35 }

try catch 文

プログラムが作られ完成し、実際に使用される場面では、プログラム作成時には思いもよらないようなことが、エラーを引き起こすケースがよくあります。その昔、C言語が主流であった時代、プログラムを書くと、コードの半分以上がエラー処理に費やされると云われました。
この try catch 文は、エラーフリーにする魔法のコードではありませんが、エラー処理をまとめて記述することができ、エラー処理コードを、コンパクトに見通しよくすることができます。
その構文は、次のようになります。

try {
    実行する文の並び
}
catch (例外型 名前) {
    例外が投げられたとき実行する文の並び
}
finally {
    try節 catch節の終了後実行する後始末のための文の並び
}

try節、finally節は、複数存在しませんが、catch節は例外の種類だけ並べることができます。
catch節、finally節はどちらも省略可能ですが、どちらかがなければなりません。
try節の実行文は、途中で例外が発生しても、例外が発生した文をスキップして、普通に最後まで実行されます。try節の実行が終了すると、その途中で発生した例外に従って、対応するcatch節が順次実行されます。それが終わると、最後にfinally節が実行されます。

このプログラムでは、backcolorパラメータの有効を判定するため、この文を使っています。

30 String value = getParameter("backcolor");
31 try { color = new Color(Integer.parseInt(value, 16)); }
32 catch(Exception e) { color = null; }

30行目で backcolorパラメータが有効でないとき、value には null が代入されます。古い言語では、その判定を30行目と31行目の間でしなければなりません。しかしここでは、引数に null が渡されたときに例外を投げる「Integer.parseInt(value, 16)」の実行で行っています。

おまけの演習

try catch 文の仕様に従えば、29〜35行目は次のようにコンパクトにできます。どのような動作になるのか、考えてみてください。

28     public void init() {
29         String value = getParameter("backcolor");
30         try { backcolor = new Color(Integer.parseInt(value, 16)); }
31         catch(Exception e) { ; }
32         setBackground(backcolor);
33     }
34 }

コンパクトであることは必ずしも無条件に良いということではありません。以後の進行は、変更前のコードを元とします。

トップヘ 目次ヘ 前ヘ 次ヘ