人間というものはあわてたり,あせったりするとついつい最悪の手を打ってしまうものだ。論語に「これを知る者はこれを好む者にしかず、これを好む者はこれを楽しむ者にしかず」とあるようにプログラミングも気持ちに余裕を持って,楽しむ心でのぞめば良いコードが書けるのだろうが,実際はなかなかうまく行かない。

 こうしろうがEclipse+Visual Editorで作っている写真部のカメラを管理するカメラ台帳アプリは,もう完成しようとしている。

 10月22日 こうしろうは細かいところを見直して修正を進める。年の0000の表示をやめ,選びやすいように降順に表示する。

----------------------------------------------------------

JComboBox1.addItem("");
//項目の追加
for (int i=2006;i>=1970;i--){
 jComboBox1.addItem(Integer.toString(i));
}

----------------------------------------------------------

 Javaのコードにするとこれだけのことだが,1970年から順に表示されるよりはずっと使いやすいだろう。
 ソースコードをレビューしていて「これはないだろう」というコードを見つけた。
----------------------------------------------------------

for (int i=1;i<=9;i++){
 jComboBox2.addItem("0"+Integer.toString(i));
}
for (int i=10;i<=12;i++){
 jComboBox2.addItem(Integer.toString(i));
}


----------------------------------------------------------

コンボボックスに2桁で月を表示するコードだが,2桁で表示するために1月から9月は0を付加し,10月以降はそのままtoStringで文字列にしている。

 たしかに見た目は問題ない。しかしこんなにやんちゃなコードを書いてはいけない。こうしろうには,たまにやっつけ仕事をしてしまうところがあるのかもしれない。

 小学校の頃,こうしろうは夏休みの宿題で本棚を作っていた。2学期がはじまる数日前だったろうか。テキトーに1時間ぐらいでやっつけようとしたのだ。板が斜めになって,ぐらぐらした本棚だった。「そんなやっつけ仕事はないだろう」と叱ったのは,もう6,7年も前のことだ。

 あわてたり,気持ちが他所に行っていると悪い癖が出てしまうのだろう。なぜ,Stringクラスのformatメソッドを使わないのか。
----------------------------------------------------------

 for (int i=1;i<=12;i++){
jComboBox2.addItem(String.format("%02d",i));
}

----------------------------------------------------------

 これで簡単に2桁の書式を設定できる。ごく当たり前の一手があわてると出てこない。

 また,java.text パッケージには国際化対応のNumberFormatとDecimalFormatクラスがある。
----------------------------------------------------------

i mport java.util.Locale;
import java.text.NumberFormat;
import java.text.DecimalFormat;

public class NumberFormatTest {

 public static void main(String[] args) {
  NumberFormat nf;
  DecimalFormat df;

  nf = NumberFormat.getCurrencyInstance(Locale.JAPAN);
  System.out.println("日本円:" + nf.format(12345.6));

  nf = NumberFormat.getCurrencyInstance(Locale.US);
  System.out.println("USドル:" + nf.format(12345.67));

  df = new DecimalFormat("#,##0.00");
  System.out.println(df.format(12345.6));
 }
}

----------------------------------------------------------

NumberFormatはLocale(ロケール)を指定してインスタンスを生成すると,国対応のフォーマット処理をしてくれる。DecimalFormat はDecimalFormat("#,##0.00")のように独自の書式を指定できる。

 出力結果は次のようになる。
----------------------------------------------------------

日本円:¥12,346
USドル:$12,345.67
12,345.60

----------------------------------------------------------

 JavaやC#などには多くのパッケージ(名前空間),膨大なクラスが存在する。どこにどんなクラスあり,そこにはどんなメソッドがあるのか,漠然としたもので構わないからイメージを作っておくといいだろう。