メソッドを作成

Since 2003.04.15  

プログラムの説明

今回のプログラムの変更点は、3つのブロックに分けることができます。

1色のパラメータを取得する部分 26〜30行目
44〜50行目
2日章の大きさ、位置のパラメータを取得する部分 20〜24行目
51〜63行目
(16〜18行目)
3日章を描く位置座標を計算する部分 16〜18行目
36〜38行目

この順番にブロックごとに説明をしていきます。

色パラメータの取得=メソッドを作成

この前のプログラムで、背景色のパラメータを取得したコードを再掲します。

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

これに続けて、次のコードを書くことによっても、日章の色パラメータは取得できます。

value = getParameter("suncolor");
try { color = new Color(Integer.parseInt(value, 16)); }
catch(Exception e) { color = null; }
if(color != null) {
    suncolor = color;
}

当然ながら似たコードが繰り返されます。この場合、繰り返しの中身がそれぞれ独立していて関係が薄い場合は、このままが良いでしょう。
今は、「色パラメータの取得」という目的に従った一連のコードになっています。
このように「一言で言い表せる内容の一連のコード」は、メソッドとして独立させるのに適したものになります。
メソッドがどれだけの内容を持てばよいのかという判定は、「呼び出し元のコードが自然なコードになるように」を基準とします。
color = getColorParameter("backcolor");「"backcolor"パラメータの色を color に代入する」となります。

戻り値型Color 無効なパラメータにはnullを戻す
引数String パラメータの文字列を渡す
実行文元のコードの30〜32行目の3行

以上にしたがって書いたのが26〜30行目の「getColorParameterメソッド」です。内部から呼び出されるメソッドですので、「private」修飾子をつけました。
一方の init 内のコードは次のようになります。

Color color;
color = getColorParameter("backcolor");
if(color != null) {
    backcolor = color;
}
color = getColorParameter("suncolor");
if(color != null) {
    suncolor = color;
}

このままでも良いのですが、「戻ってきたColor型がnullでない」というif 文の趣旨を強調するために、
color = getColorParameter("backcolor")をカッコで括ってif 文の条件式に入れたのが、44〜50行目のコードになります。

数値パラメータを取得

日章の大きさ、位置は数値として表現できます。数値であれば10進数が最も自然な表現です。ですから、10進数としてパラメータをやり取りする仕様にしています。
色パラメータと同じ考え方でメソッド作成と、メソッドの呼び出しをしているのが、それぞれ20〜24行目、51〜63行目です。
少し問題になるのは、23行目のパラメータが有効でないときの処理です。ここでは、ゼロを返すようにしていますが、「-1」を返すほうが良いかもしれません。「無効な値」を強調する趣旨です。
16〜18行目は、パラメータで指定されなかったときの値を定めています。

日章の大きさpdist 旗の幅に対する100分比
日章の中心のX座標px 旗の幅に対する100分比
日章の中心のY座標py 旗の高さに対する100分比

以前のプログラムではY座標も幅に対して設定していましたが、縦横比の変更に対応できるように高さに対する比に変更しました。

日章を描く位置座標を計算

パラメータとして渡すのを相対座標としましたので、描画するためには絶対座標を計算しなければなりません。
init メソッドで修正された pdist, px, pyを使って、fillOvalに渡す値を計算しています。

ここまでのまとめ

日の丸をテーマに、徐々にプログラムを膨らませながら、Java の最も核となる部分を解説してきました。多くの解説書では、文字の表示、ボタンの表示から始めているようです。しかし、HTML文書を飾るアプレットを中心に考えると、画像を作るプログラムが重要です。
引き続き、動く画像を取り上げたいと思います。日の丸は静止画でしたが、動くためには「時間」が必要になります。

トップヘ 目次ヘ 前ヘ 次ヘ