[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 11547] final の多用( Re: エクストリームプログラ ミングエピソード)



高橋(徹)です。

   "Kazuya Maebashi <PXU00211@xxxxxxxxxxx>"さんは書きました:

> >「Java魂 −プログラミングを極める匠の技」
> >http://www.oreilly.co.jp/books/4873112079/
> ...
> >2章で、finalを多用する、3章の不変性 あたりが酷評のネタになっている
> >ようです。どんなことが書いてあるのでしょうか。
> 
> 件の本は読んでませんし、amazon.comの書評も今ちょっと見てメゲたのですが。
> 
> 「継承はソースの再利用の手段ではない」という主張に同意する人が、
> 「finalを多用する」という主張には拒否反応を示すケースが多いことを
> 私は常々不思議に思ってたんですが、アメリカでも事情は同じってことでしょうか。

なるべくfinalを使うのは良い習慣ではないかと思っています。嫌う人が多い
とは知りませんでした。
アマゾンの書評ではnoisy, less readable, boring などと言われていますね。

10/27刊行予定となっているのでもうすぐ書店に並ぶと思いますが、
2章だけ(英語)Webで公開されているのでざっと目を通してみました。
・最も有名な定数としての利用例
  public final static double PI = 3.141;
・他のクラスで定義されたプリミティブ型/String型の変数はコンパイル時に
  定数として埋め込まれるので、変更漏れが起きる点に注意
  → 注意のみで解決法には言及なし
・クラススコープのprivate static finalを多用するな、メソッドスコープに
  限定せよ(一つのメソッドでしか使用しないならば)
・ローカル変数の誤った再割当をコンパイル時に検出すべく、finalにする
 (特に長い複雑なメソッドで有効)
・引数をfinalにすることで、誤った再割当をコンパイル時に検出する
・finalコレクション(static initializerで要素を格納後、unmodifiableな
  参照を獲得しフィールドに代入)
・フィールド変数をfinalにする
・finalクラスとfinalメソッド
・条件コンパイルへの応用(final boolean)

上記を知っている人には物足りない本となるかもしれません。
"hardcore"を名乗るからには・・・ と期待を持って読むと、人によっては
裏切られるのがその一因でしょう。

---
TAKAHASHI Toru