2008年6月24日火曜日

[Java]ローカル変数に対するfinalの意味

Javaで、ローカル変数にfinalを付けると、その変数は変更されないということを保障します。
では、変更しないローカル変数には全てfinalを付けるべきなのでしょうか?

今回は、必ずfinalを付けざるを得ない、以下のコードのような場合を考えてみたいと思います。


class DisplayImpl implements Display {
private JFrame frame;

public DisplayImpl(int width, int height) {
final Dimension size =
new Dimension(width, height);

// ① finalで宣言

frame = new JFrame() {
Dimension getPrefferedSize() {
return size;
// ② finalでないと参照できない
}
};

size.height = 5; // ③ OK

size = null; // ④ コンパイル・エラー
}
}

JFrameを派生した内部無名クラスからローカル変数sizeにアクセスする場合、final宣言が必要です。

これは評価のタイミングで、無名クラスが生成されるタイミングが、コードの順番どおりという訳ではないので、例えば、④のようにnullを代入してしまうと、冒頭でnewしたDimensionオブジェクトを参照していいのか、nullを代入したあとの値を参照していいのかの判断がつかないためだと思われます。

しかし、Javaではプリミティブ型以外は全て参照ですので、参照先を変更する(③のような)コードならOKなのです。

ソースコードを検査するあるツールを入れたりすると、変更していないローカル変数にfinalが付いていない旨のエラーがでることがあります(設定次第)。

そうなると、参照型のローカル変数というのは大抵、finalを付けないといけないということになってしまいます。

同じローカル変数に何度も別のオブジェクトを割り当てたり、わざわざnullを設定するようなことが少ないからです。

結論として、個人的なルールとしてはローカル内部クラスか無名内部クラスからアクセスする場合のみfinalを付けるという方針をとることにしました。

『プログラミング言語Java 第4版』P151にも、同様の意見が書かれていました。

2008年6月18日水曜日

.svnフォルダの削除(メモ)

削除したいディレクトリに移動して、以下のコマンドを実行。

for /R %i in (.svn) do rd /Q /S "%i"


↑普段はsvn exportを使えば良いのですが、バックアップの削除のときなどに。

2008年6月17日火曜日

メイリオ on Emacs-22


メイリオというフォントがあるようですね。Windows Vistaのフォントだそうで…
Vistaは仕事関係でもまったく縁がないので触ったこともないですが、このフォントだけ欲しいなと思い探しました。

理由は、前々からWindowsにはClearTypeというフォントを滑らかにする機能があるのを知っていて、使いたかったのですが、ビットマップフォントには効かないのだそうで…

MS明朝やMSゴシックでは、16ポイント以下のフォントがビットマップになってしまうので(回避する方法はあるようですが)、メイリオならと思った訳です。

それともうひとつ、こちらのほうが大事ですが、Emacs-22の日本語フォントが汚くて…いろいろ物色していたらメイリオに出会ったという訳です。

nobさんのサイトを参考に設定しようとしましたが、Windows版のEmacs-22の設定ファイル(.emacs)がどこにあるのか(どこに作るのか)分からなくて断念。

ブラウザのデフォルトフォントをメイリオにして気分を変えてみましたが、今日はここまで^^;

ちょっとお休み

実は、Emacsを自宅のMacBookにもインストールしたのでそのレポートを書きたかったのですが、自宅でゆっくりブログを書く時間がなくてなかなか進まなかったのです^^;

昨日から客先の僕のPCが新しくなって、今、入れ替え作業中です。

この前まで、C#.NETにどっぷり浸かっていた僕ですが、今週からは一転、Javaの仕事になります。
流行でいうとEclipseを使うところなのですが、NetBeans IDEが無償になっているので、一度、検証してみました…

が、無償で付いてきてリバース/フォワードエンジニアリングも対応しているUMLエディタに期待していたのに、モデリングツールとしても並以下(根拠はまたいずれ…)だし、何といっても印刷機能が貧弱すぎる。

バグじゃないのかとすら思えます。
まず、まともに印刷できないですから。。なんかちっちゃくなります^^;

画像出力にも対応しておらず、コピーしてワードに貼り付けたりしてみましたが、文字が潰れてしまってまったく駄目!

今、次のUMLデザイナを探してますが、Eclipseプラグイン形式のものが多く、やはり開発環境としてもEclipseを使うことになりそうです。

そんな中でも、テキストエディタというのは必要なもので、なんでもかんでもEclipseのエディタで開くわけにいかないですし、Eclipseプロジェクトとは紐付かないテキストファイルを開いたり、検索したり、編集したりするのに、軽くて便利なテキストエディタは欠かせません。

いつもWindowsのときは秀丸エディタを使っているのですが、マシンの入れ替えを機にEmacsにチェンジしようかなと考えています。

かなり、突飛な考えですが、そうでもしないとEmacsの操作を覚えられないだろうと思うので…

2008年6月4日水曜日

書籍

プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~』買ってしまいました。
できるだけお金をかけないで…と思っていたのですが、言語を覚えるのに何か一冊、やはり、書籍としてまとめられたものがないと辛いと感じました。
(インターネットが普及してからプログラマになった世代の人たちには不要なのでしょうか?)