Массивы в Kotlin

Массивы в Kotlin представлены классом Array, который имеет функции get и set (которые превращаются в [] в соответствии с соглашениями о перегрузке операторов) и свойство size вместе с несколькими другими полезными функциями-членами:

class Array<T> private constructor() {
    val size: Int
    operator fun get(index: Int): T
    operator fun set(index: Int, value: T): Unit

    operator fun iterator(): Iterator<T>
    // ...
}

Чтобы создать массив, мы можем использовать библиотечную функцию arrayOf() и передать ей значения элементов, так что arrayOf(1, 2, 3) создаст массив [1, 2, 3]. Кроме того, библиотечная функция arrayOfNulls() может использоваться для создания массива заданного размера, заполненного null элементами.

Другой вариант - использовать конструктор Array, который принимает размер массива, и функцию, которая может возвращать начальное значение каждого элемента массива с учетом его индекса:

// Создает Array<String> со значениями ["0", "1", "4", "9", "16"]

val asc = Array(5) { i -> (i * i).toString() }

asc.forEach { println(it) }

Как мы уже говорили выше, операция [] обозначает вызовы функций-членов get() и set().

Массивы в Kotlin инвариантны. Это означает, что Kotlin не позволяет нам назначать Array<String> для Array<Any>, что предотвращает возможный сбой во время выполнения (но вы можете использовать Array<out Any>).

Массивы примитивных типов

Kotlin также имеет специализированные классы для представления массивов примитивных типов без накладных расходов на упаковку: ByteArray, ShortArray, IntArray и так далее. Эти классы не имеют отношения наследования к классу Array, но имеют одинаковый набор методов и свойств. Каждый из них также имеет соответствующую фабричную функцию:

val x: IntArray = intArrayOf(1, 2, 3)

x[0] = x[1] + x[2]

// Массив int с size 5 со значениями [0, 0, 0, 0, 0]
val arr = IntArray(5)

// например инициализировать значения в массиве константой
// Массив int с size 5 со значениями [42, 42, 42, 42, 42]
val arr = IntArray(5) { 42 }

// например инициализировать значения в массиве, используя лямбду
// Массив int с size 5 со значениями [0, 1, 2, 3, 4] 
//(значения, инициализированные по значению индекса)
var arr = IntArray(5) { it * 1 }


Читайте также:


Комментарии

Популярные сообщения из этого блога

Строки в Kotlin

Наследование в Kotlin

Возврат и прыжки в Kotlin