
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文書を飾るアプレットを中心に考えると、画像を作るプログラムが重要です。
引き続き、動く画像を取り上げたいと思います。日の丸は静止画でしたが、動くためには「時間」が必要になります。
| トップヘ | 目次ヘ | 前ヘ | 次ヘ |
Copyright (C) 2003 System Five Japan (Mori). All Rights Reserved
Java およびそのほか Java を含む標章は、米国 Sun Microsystems, Inc.の商標です