今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

匿名クラス

以前は EventListener の小さな処理を書くのに匿名クラスを使うことが多かったが、最近ではほとんど使わなくなった。昔書いた匿名クラスを使っているコードを見て思うのだが、匿名クラスって何しているのかわかりにくい

    JButton deleteButton = new JButton("削除");
    deleteButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            // 選択されている項目を削除する
        }
    });

サンプルを書いてみたけど、所詮サンプルコードなので抽象化してあったり、コメントで「選択されている項目を削除する」と書いてあるのでわかりやすいんだけど、これが何行かのコードだったとしたら可読性がかなり下がるのは想像に難くない。
それよりも、

    JButton deleteButton = new JButton("削除");
    deleteButton.addActionListener(new DeleteController());

と書いた方が明らかに可読性が高い。
匿名クラスって、コードを書くときには使いやすいように感じるんだけど、その使いやすさってのは、

  • 新たなクラスを定義する手間をかけずにすむ
  • クラス名を考えなくてすむ

というところに起因している。つまり、コードを書く人の手抜きに他ならない。
内部クラスだってそれなりに責務を持っている。その責務にあった適切なクラス名を考え、命名してやることは重要だろう。クラスに責務があるのならば、クラスの大きさは問題ではない。リファクタリング本でも、巨大なクラスは不吉な匂いとして挙げられているが、小さいクラスは不吉とされていない。