Как перевести следующий цикл обратного отсчета Java в Scala?
Следующий код Java - очень простая часть кода, но каковы эквивалентные конструкции в Scala?
for (int i=10; i> 0; i-=2) {
System.out.println(i);
}
Ответ 1
Ответ зависит от того, нужен ли вам код так же быстро, как и на Java.
Если вы просто хотите, чтобы он работал, вы можете использовать:
for (i <- 10 until 0 by -2) println(i);
(где until означает опустить окончательную запись, а to означает включение окончательной записи, как если бы вы использовали > или >=).
Однако для этого будут некоторые скромные накладные расходы; цикл for является более общей конструкцией в Scala, чем в Java, и хотя он может быть оптимизирован в принципе, на практике он еще не (не в основном распределении через 2.9; плагин ScalaCL, вероятно, оптимизирует его для вас, однако).
Для println печать займет гораздо больше времени, чем цикл, так что все в порядке. Но в узком круге, который, как вы знаете, является узким местом производительности, вам нужно использовать вместо этого циклы:
var i = 10
while (i > 0) {
println(i)
i -= 2
}
Ответ 2
Чтобы итератировать от 10 до 0 (исключая) с шагом 2 в Scala, вы можете создать диапазон с помощью методов until и by, а затем перебрать их в цикле for: