プログラムdeタマゴ

nodamushiの著作物は、文章、画像、プログラムにかかわらず全てUnlicenseです

final半端主義

final原理主義id:takahashikzn:20110122という記事があったので、私もだぁ〜と記事にしたくなった。
私も多々final宣言をする。

その中でも一番重要なメリットは、

『意図していない代入を自動的にチェックできる』ということ。

賛成です。が、私はあまりこう使い方はしていない。後で本当に代入をしないかどうかって意外に分からないからだ。後からやっぱり必要に迫られて書き換えることもある。

だからもう一つ付け加えて欲しい。

「意図した代入の忘れを自動的にチェックできる」ということ。

私が良くやる半端なfinal宣言の使い方は、コンストラクターで初期化すべき変数にfinal宣言をする。これにより初期化し忘れというミスを確実に防げます。

コンストラクター作成後、その変数がミュータブルならその都度final宣言を外します。
こうして私のクラスフィールドにはfinal宣言が多発します。


id:takahashikznさんの記事を読むまで、他人がソースを読んだときの足がかりになる、ということは考えたこともありませんでしたが、確かに最後までfinalが残っていればこいつは変更されなかったんだな〜というのがよく分かりますね。(オブジェクト自体はミュータブルだったりして中身が変更されてるということはありますが。)

ですが、何であれ結局のところfinal宣言とは誰かの為ではなく確実に自分の為に行う物だと思います。
証拠に私はチームでプログラム書いたことナース。(私はJAVA屋のくせにサーバーサイド何それおいしいの(^p^)というアホです。)



あと、テンプレートクラスなんかで、いちいちソース見ないとどの関数をオーバーライドして良くてオーバーライドしちゃいけないのか分からなくなるんですね。
そんなとき、関数にfinal宣言がついてるとEclipseさんがはじめから候補に入れてくれないので気が楽ですね。(まぁ、これは普通の使い方か。)


画像処理屋なので並列処理させる為に関数内部でfinal宣言もよくやります。(これは必要に迫られた宣言だから今回とは意図が違うか。)


というわけで、私はfinal宣言大好きです。
あと、もしかしたらJITコンパイラでいつの日かなんか最適化の恩恵受けられるかも、という淡い期待も抱けます。(※最近のは優秀だからfinalあろうが無かろうがちゃんと処理してくれています。)