Почему вы не можете указывать петли var / val в Котлине?

Почему вы не можете указать тип val или var для цикла в Kotlin. Например, я хотел бы иметь возможность делать

for (var i in 0...data.size - 1) { for (j in 0..bytes.size - 1) { bytes[j] = data[i++]//cant do i++ in current kotlin because "i" is val } //do stuff } 

Но вместо этого я должен это сделать

  var i = 0 while (i < data.size) { for (j in 0..bytes.size - 1) { bytes[j] = data[i++] } //do stuff } 

Ваш пример немного отличается от типичного примера Java for(int i=0;i<data.size;i++) . В версии Kotlin «i» на самом деле является элементом диапазона, в этом случае i ++ не имеет смысла. Так получилось, что диапазон, который у вас есть, – это список индексов.

То, как вы используете цикл Kotlin for, намного ближе к циклу foreach Java for(i : indexes) .

Я думаю, что, поскольку Котлин – это язык, который пытается упростить соблюдение большинства концепций функционального программирования, он предпочитает запрещать такое поведение. Кроме того, возможная проблема, которую может найти ваш исходный код, – это исключение OutOfBoundException в ситуации, когда массив байтов имеет больше элементов, чем массив данных.