Немного о массивах в Kotlin
Полгода назад я собирался разобраться с массивами в Kotlin. Нельзя сказать, чтобы я разобрался, но у меня появилось несколько замечаний по этому поводу. Возьмем простейший код:
package ru.yamakarov.arrays
fun main(args: Array<String>) {
val a = Array(10, { x: Int -> x + 1})
for (i in a) {
println(i)
}
}
Удобно, что не надо писать оператор new
, очень приятная мелочь.
Не надо писать точек с запятой, и мы как бы не поражены раком точки с запятой.
Тип массива выводится из возвращаемого значения функции инициализатора.
Это очень классно придумано, не будет значений заполненных мусором.
И не надо писать тип массива, он итак понятен, а значит, если я захочу поменять тим мне достаточно вы выражении возвращать другое значение.
В этом примере еще более удобном менять тип массива, потому что и for
и println
принимают любые значения.
Я посмотрел во что это все превращается и сделал генерацию байткода и декомпиляцию:
public final class MainKt {
public static final void main(@NotNull String[] args) {
Intrinsics.checkParameterIsNotNull(args, "args");
int size$iv = 10;
Object[] result$iv = new String[size$iv];
int i$iv = 0;
for(int var5 = result$iv.length; i$iv < var5; ++i$iv) {
String var11 = "";
result$iv[i$iv] = var11;
}
String[] a = result$iv;
i$iv = result$iv.length;
for(int var13 = 0; var13 < i$iv; ++var13) {
String i = a[var13];
System.out.println(i);
}
}
}
Тут видно что используется Java массив String[]
.
Если поменять инициализатор на возвращение Int
то будет использоваться Integer[]
.
Для того, чтобы работал int[]
надо использовать IntArray
.
Подводя итог, кажется что можно очень кратко писать и получать производительный код.