8

Javaでは、ケースが少ない場合はswitchif else ifステートメントを使用しないでください。この場合は、を使用することをお勧めします。

グルーヴィーにも当てはまりますか?

これら2つのコードのどちらがパフォーマンスが高いですか?

myBeans.each{
    switch it.name
    case 'aValue':
        //some operation
    case 'anotherValue:
        //other operations
}

また:

myBeans.each{
    if(it.name == 'aValue'){
        //some operation
    }
    else if (it.name =='anotherValue){
        //other operations
    }
}
4

1 に答える 1

14

Javaでは、コンパイラがジャンプテーブルからターゲットを決定できるtableswitch命令を生成するため、「switch」はシリアルifブロックよりも効率的です。

Groovyでは、switchは整数値に制限されておらず、多くの追加のセマンティクスがあるため、コンパイラーはその機能を使用できません。コンパイラーは、シリアルifブロックの場合と同じように、一連の比較を生成します。

ただし、ScriptBytecodeAdapter.isCase(switchValue, caseExpression)比較ごとに呼び出されます。これは常にisCase、caseExpressionオブジェクトのメソッドへの動的なメソッド呼び出しです。ScriptBytecodeAdapter.compareEqual(left, right)その呼び出しは、if比較で呼び出されるよりも潜在的に高価です。

そのため、Groovyでは、スイッチは一般にシリアルifブロックよりも高価です。

于 2012-08-24T17:50:05.913 に答える