Eclipseを入れちゃったので、IntelliJとどれぐらい違うのかなと思って比較してみたよ。NetBeansも仲間にいれてます。
id:masanobuimai さんのコメントを元にEclipseにQuick Fixを使用した場合の操作を追加しています。
比較した機能
リファクタリング機能で最も使うローカル変数の抽出機能を比較してみたよ。個人的には、この機能はかなり重要だと思ってます。
Eclipse
Eclipseでローカル変数の抽出をするには、抽出する部分を事前に選択します。選択範囲でローカル変数が抽出できないとエラーになってしまいます。なんか残念すぎますね・・・
下の例だと、「map.get("USER_ID")」の戻り値をローカル変数に抽出します。
範囲選択をしたら、Refactorメニューからローカル変数の抽出を選びます。下の画像のような感じですね。
変数名を入力するダイアログが表示されるので、好きな変数名を入れてあげます。
これで変数の抽出が完了です。型をインタフェースに変えたりってこともできないみたいですね。
NetBeans
抽出範囲は、カーソルの位置によって変わるようです。現在のカーソル位置以降でローカル変数に抽出可能なものを候補として出してくれます。IntelliJと同じ動きですね。
map変数の部分にカーソルがあると、map以降でローカル変数に抽出可能なものがリストされます。
map変数より後にカーソルがあると、mapをのぞいたものがリストされます。
ローカル変数の抽出はリファクタリングメニューの変数の導入から行います。
Eclipseと同じように変数を入力するダイアログが表示されるので、好きな変数名を入れてあげます。
finalにできたりもするようですね。
これで終わりです。型はEclipseと同じように選べないんですね。
IntelliJ
抽出範囲の選択は、基本的にNetBeansと同じ動きですね。見た目はこんな感じです。
ローカル変数の抽出は、RefactorメニューのExtractのVariableから行います。昔は、Introduce Variableみたいな名前だった気がします。
個人的には、ダイアログ出すよりエディタ上でのリファクタリングが好みだけど、ここは他のIDEとあわせてダイアログを表示するリファクタリングでいきます。
変数を入力するダイアログが表示されます。変数名は、呼び出したメソッドの名前やMapのキー値などを元に候補として幾つか表示してくれます。これがなにげに便利ですよ。
型も親クラスや実装しているインタフェースを候補で出してくれるので、インタフェースで宣言が簡単に出来ます。下の絵は、new ArrayList
抽出後はこんな感じです。
ちなみにIntelliJでは、ダイアログを出さずにエディタ上だけでの操作も可能です。この切替は、「Settings」の「Editor」から行います。右下の方の「Enable in-place mode」にチェックを入れるだけです。
エディタ上だけで行う場合は、こんな感じになります。shift-tabで型選択になってtabで変数名編集にといったりきたりができます。
まとめ
微妙な違いがあって、Eclipseはちょっと使いづらすぎるかなと。範囲選択を事前にしないとダメってのは使う気がなくなってきてしまいます。
IntelliJとNetBeansは型選択ぐらいの差があるぐらいかな?この差が個人的にはものすごい大きいと感じてます。
Eclipseは、リファクタリングメニューからのローカル変数の抽出ではなく、Quick Fixからの操作が圧倒的に便利です。(なぜ、同じローカル変数の抽出なのに違いがここまであるのかわかりませんが・・・)
IntelliJとEclipse(Quick Fix)を比較した場合は、そこまで大きな機能差はありません。(最後は好みの問題かな)
おわり。気が向いたら続編書きます。