groovy "switch" против " if " производительность
Я знаю, что на Java переключатель оператор не должен использоваться, когда у вас есть несколько случаев, и в этом случае лучше использовать if else if
.
Это правда и для groovy?
что более эффективно между этими двумя кодами?
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
}
}
1 ответов
в Java "switch" более эффективен, чем последовательные блоки if, потому что компилятор генерирует tableswitch инструкция, где цель может быть определена из таблицы прыгнуть.
в Groovy switch не ограничивается целочисленными значениями и имеет много дополнительной семантики, поэтому компилятор не может использовать это средство. Компилятор генерирует серию сравнений, так же как и для последовательных блоков if.
,ScriptBytecodeAdapter.isCase(switchValue, caseExpression)
вызывается для каждого сравнение. Это всегда динамический вызов метода isCase
метод для объекта caseExpression. Этот вызов потенциально дороже, чем ScriptBytecodeAdapter.compareEqual(left, right)
который вызывается для сравнения if.
Так в Groovy, переключатель вообще дороже чем серийный если блоки.