NetBeans リファクタリング

beta 2からの新機能かどうかわからないけど、リファクタリング機能が付いた。
と言っても、今の所クラス名・メソッド名のリネームだけ、しかもご丁寧に「リファクタリングは正確じゃないから目視でチェックしてね」とメッセージが出る。
この状態で評価するのもどうかと思うけど、とりあえずちょっといじった感想。
クラスのリネームはそこそこ使えそう。ただしRailsのモデルで"Book"を"Note"にリネームしても、あちこちにある"Books.*"は"Notes.*"にはなりません(なって欲しい気もするけど、できない理由もわかる)。
メドッドのリネームは微妙。


1 def foo(a)
2 a
3 end
4 bar=foo(BazClass1.new)
5 p bar.bar
6 bar=foo(BazClass2.new)
7 p bar.bar
なんてコードで、BazClass1のbazメソッドをリネーム。
上記のコードを追えば5行目のbarはBazClass1だけど、7行目のbarはBazClass2だとわかる。
しかし、BazClass1のbarをリネームすると両方リネームされてしまう。
これはしかたない。上記のfooは人間の目にはシンプルだが、Rubyでメソッドの戻り値の型を実行時以外に判断するのは不可能に近い。
grepでメソッド名を検索してリネームするよりは、構文を解釈してくれるので多少楽はできるかも(grepだと、上記の例の5行目bar.barの両方がヒットしてしまうが、NetBeansでは"."の後ろのbarしかヒットしない)。
rubyでのメソッドのリネームはdeprecated 指定してテストを流すのが正しいのでしょうね。