Приведённый Kotlin-код уже использует mutableListOf, корректный add и обратный обход. Он выводит 7, 5, 1 и Done!, пропуская только элемент 3.
Рефакторинг Kotlin‑кода: исправление ошибок и улучшение стиля
Приведённый Kotlin-код уже использует mutableListOf, корректный add и обратный обход. Он выводит 7, 5, 1 и Done!, пропуская только элемент 3.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо переработать приведённый ниже Kotlin‑фрагмент, устранив компиляционные проблемы и сделав логику более понятной. Требуется заменить неизменяемый список на изменяемый, корректно добавить новый элемент, реализовать обход элементов в обратном порядке без лишних синхронизаций и обеспечить правильный вывод.
val numbers = mutableListOf(1, 3, 5)
fun main() {
numbers.add(7)
numbers.forEachReversed { value ->
if (value == 3) return@forEachReversed
println(value)
}
println("Done!")
}
fun <T> List<T>.forEachReversed(action: (T) -> Unit) {
this.asReversed().forEach { action(it) }
}
Ответ
Приведённый Kotlin-код уже использует mutableListOf, корректный add и обратный обход. Он выводит 7, 5, 1 и Done!, пропуская только элемент 3.
Return@forEachReversed завершает текущий вызов lambda, а не main. AsReversed предоставляет представление исходного списка, не копию и не синхронизацию. Если доступ идёт из разных потоков, безопасность нужно обеспечить отдельно. Для локальной задачи можно перенести numbers внутрь main, чтобы убрать ненужное глобальное состояние.
Источник: kotlinlang.org.