Что такое оператор 'spread' в Kotlin и как его использовать?

Оператору 'spread' в Kotlin соответствует префикс перед массивом или разреженным массивом (vararg).

Короткий ответ

Что ответить на собеседовании

Оператору 'spread' в Kotlin соответствует префикс перед массивом или разреженным массивом (vararg). Он используется для передачи элементов такой коллекции в функцию, ожидающую переменное число аргументов (vararg). По сути, он "разворачивает" (spreads) коллекцию на отдельные аргументы.

Подробный разбор

Ответ с пояснениями

Оператору 'spread' в Kotlin соответствует префикс * перед массивом или разреженным массивом (vararg). Он используется для передачи элементов такой коллекции в функцию, ожидающую переменное число аргументов (vararg). По сути, он "разворачивает" (spreads) коллекцию на отдельные аргументы.

Пример:

fun printNumbers(vararg numbers: Int) {
    for (number in numbers) {
        println(number)
    }
}

fun main() {
    val intArray = intArrayOf(1, 2, 3)
    printNumbers(*intArray) // Использование оператора spread
}

Без оператора *, попытка передать intArray в функцию printNumbers привела бы к ошибке компиляции, так как printNumbers ожидает переменное число Int, а не массив Int.

Оператор 'spread' также можно использовать при создании нового массива путем объединения существующего массива с отдельными элементами или другими массивами:

fun main() {
    val array1 = arrayOf(1, 2)
    val array2 = arrayOf(3, 4)
    val combinedArray = arrayOf(*array1, 5, *array2) // Использование оператора spread
    println(combinedArray.contentToString()) // Выведет [1, 2, 5, 3, 4]
}

Ключевые моменты:

  • Применяется только к массивам (Array, примитивные массивы) и Vararg.
  • Разворачивает элементы коллекции в отдельные аргументы функции или элементы нового массива.
  • Обозначается с помощью префикса *.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее