NetBeansとEclipseの比較

7.1.1と3.7で比較。

IDEAはどーなんだ、と思った人、某氏がやってくれるはずですのでお待ちください。

プロジェクトツリーの見た目

左がNetBeans、右がEclipseです。
http://shin.cside.com/diary/2012/0525-01.png
見た目はほぼ同じですね。
プロジェクト作成後何もなければ。



で、ユニットテストの作成後。
Eclipse
http://shin.cside.com/diary/2012/0525-02.png


NetBeans
http://shin.cside.com/diary/2012/0525-03.png
ここが大きく違います。
Eclipseは結構昔から大抵のIDEには標準であるテストパッケージ/ライブラリという概念がありません。ソースのルートを複数用意は出来ますが、そこまでです。

一応JUnitを利用すると自動でJUnitのライブラリをつけるか聞いてはきますので、最低限のおもてなしはなんとかしてあるといったところでしょうか。
ソースやライブラリの依存方向のミスが解決出来ないので早く実装してほしい機能No1だと思われます。

ユニットテスト

以下のコードを元にJUnitのテストケースを作成します。

package hoge;

public class Compute {

	public int add(int a, int b) {
		return a + b;
	}
}
Eclipse
package hoge;

import static org.junit.Assert.*;

import org.junit.Test;

public class ComputeTest {

	@Test
	public void testAdd() {
		fail("まだ実装されていません");
	}

}
NetBeans
package hoge;

import org.junit.*;
import static org.junit.Assert.*;

public class ComputeTest {
    
    /**
     * Test of add method, of class Compute.
     */
    @Test
    public void testAdd() {
        System.out.println("add");
        int a = 0;
        int b = 0;
        Compute instance = new Compute();
        int expResult = 0;
        int result = instance.add(a, b);
        assertEquals(expResult, result);
        // TODO review the generated test code and remove the default call to fail.
        fail("The test case is a prototype.");
    }
}

そのまま実行するとどちらもfailで未実装だと説明するあたりは同じですね。

ただ、NetBeansのほうはメソッドの型と戻り値をわかりやすく表示していてサンプル的にassertEqualsを書いてあります。さらにTODOコメントを入れてあるのですぐに見つかるようにしているというのが違います。

補完

一番基本の補完ですが、キーはCTRL+SPACEで同じです。

ですが、動きは違います。

Eclipse

http://shin.cside.com/diary/2012/0525-04.png
newのあとで補完させようと思っても出てきません。

NetBeans

http://shin.cside.com/diary/2012/0525-05.png
こちらはMapインターフェースを持っているものを表示しようとします。


そのため、LinkedHashMapをあいまいに覚えていた場合、ここまで打ち込まないとならないようです。
http://shin.cside.com/diary/2012/0525-06.png


一方NetBeansでは1文字で十分です。
http://shin.cside.com/diary/2012/0525-07.png
また、よくよくみるとNetBeansで補完してくれるのはクラス名までです。どのコンストラクタを利用するかは選択後に表示されます(すでにインポートされていない場合は再度CTRL+SPACEを押してください)。
http://shin.cside.com/diary/2012/0525-08.png


基本的にNetBeansは1文字も打ち込まず、状態に合わせてCTRL+SPACEでどんどん補完やクラスなどを探していく、ということがEclipseにくらべて圧倒的に多いです。

そして、現在の入力されているコードを判断して補完内容を決めます。一方、Eclipseはこれの入力状態で補完したときだけ、次にこれが有効になるということが多いです。


たとえば、引数の補完。
メソッドを補完で確定させた場合だけは
http://shin.cside.com/diary/2012/0525-09.png


引数の絞込みが可能になります。フィールドやパラメータ、ローカル変数が候補に上がっていますね。
http://shin.cside.com/diary/2012/0525-10.png


たとえば1と2をすでに確定させていた場合、CTRL+SPACEによる補完は効きません。
http://shin.cside.com/diary/2012/0525-11.png


一方NetBeansは変数以外にもメソッドの戻り値にあうものすべての候補を出した。
http://shin.cside.com/diary/2012/0525-12.png


もちろん、補完確定後に、カーソルを持っていってCTR+SPACEで同じ補完が表示されます。
http://shin.cside.com/diary/2012/0525-13.png


NetBeansに慣れてる人はまずCTRL+SPACEをおして現在の状態で何が選べるかを考えてから候補になりそうなものを絞ってきめていく、という開発手法をとることがおおいかもしれません。

おかげで、まったくしらないクラスやメソッドを補完中にさがしだして、より詳しくなる、楽をするといったことが多いです。