2011年8月15日月曜日

第3回 Java7はここが違う!


前回<>次回

登場人物
  • NRT
    猪突猛進なプログラマー
    考える前に体力勝負でプログラミングするタイプ。
    たまに鋭い洞察力を見せるため、
    周囲からは落ち着いてさえいれば…と言われている。
  • SSK
    冷静沈着なプログラマー
    20:80の法則に習い、実は仕事の一部分を学習に当てている。
    他の人はそれに気がついていない。
    Java7についても以前からチェックはしていた。
  • SKR
    紅一点なプログラマー
    暗算は早いけど、プログラミングはそこそこ。
※登場人物は忍者ではありません。架空のプログラマーです。

新機能:Strings in switch Statements

SKR「SSK君、ちょっといいかな?」

SSK「どうした?」

SKR「SSK君なら、これをどう実装するかと思って。」

public int toConstantFieldValues(String dayOfWeek) {
    if (dayOfWeek == null) {
        throw new IllegalArgumentException();
    } else if (dayOfWeek.equals("日")) {
        return 1;
    } else if (dayOfWeek.equals("月")) {
        return 2;
    } else if (dayOfWeek.equals("火")) {
        return 3;
    } else if (dayOfWeek.equals("水")) {
        return 4;
    } else if (dayOfWeek.equals("木")) {
        return 5;
    } else if (dayOfWeek.equals("金")) {
        return 6;
    } else if (dayOfWeek.equals("土")) {
        return 7;
    } else {
        throw new IllegalArgumentException();
    }
}

SSK「…言いたいことは分かった。
       もっといいやり方がないかってことだな。」

SKR「SSK君だったら、やっぱりハッシュテーブルを使う?」

SSK「(NRTならそんな疑問を抱くこともないんだろうな…まあいい)
       いや使わない。同じ実装にする。
       大した個数じゃないし、何より変化しない要素だ。
       暦が変わったのなら話は違うけどな。」

SKR「う~ん、何か歯がゆいわね~。他に手段はないの?」

SSK「enumを使うっていう手もあるが、
       割に合わない複雑さになると思う。
       Java SE 7になれば改善されるんだが…」

SKR「え?どうなるの?」

SSK「switch文で文字列が使えるようになる。
       さっきのはこう書き直せる。」

public int toConstantFieldValues(String dayOfWeek) {
    if (dayOfWeek == null) {
        throw new IllegalArgumentException();
    }
    switch (dayOfWeek) {
        case "日": return 1;
        case "月": return 2;
        case "火": return 3;
        case "水": return 4;
        case "木": return 5;
        case "金": return 6;
        case "土": return 7;
        default: throw new IllegalArgumentException();
    }
}

SKR「ふ~ん、nullチェックは変わらないのね?」

SSK「ああ、チェック無しだとNullPointerExceptionになる。
       defaultに来るのはnullを除いたその他になる。」

SKR「これいいわね~、正規表現とかはできないの?」

SSK「(仕様を斜め読み)…できないみたいだな。
       あくまでもequalsの置換だけのようだ。」

SKR「文字列なんだから、そこまでやって欲しかったわね。」

SSK「equalsとmatchesの見分けが付けば、俺もありだと思う。」

SKR「あ~そっか、いつも正規表現するってわけじゃないものね。」

SSK「今後の発展に期待…かな。」

前回<>次回

0 件のコメント:

コメントを投稿