💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В каждом задании верен только один вариант. После завершения будут показаны общий результат и 4 тематических шкал.
Вопрос 7 из 20
Что стоит исправить в «Изменение объекта, связанного с val» перед слиянием?
Kotlin val и var · Изменение объекта, связанного с val Копировать
// Сохраните назначение фрагмента, но укрепите его контракт.
fun main() {
val tags = mutableListOf("jvm")
tags += "android"
// tags = mutableListOf("native")
println(tags.joinToString("/"))
}
Спрятать участок за вспомогательной функцией, сохранив предположение: Она напечатает только `jvm`, поскольку `+=` для `val` игнорируется.
Если вызывающему коду не следует менять коллекцию, принимать и возвращать `List<String>`, а изменяемый список держать внутри владельца состояния.
Перенести проверку в вызывающий код, исходя из того, что возникнет `UnsupportedOperationException`, так как список создан через `mutableListOf`.
Сохранить API и считать достаточным условие: Код не компилируется, потому что `val` запрещает вызывать изменяющие методы объекта.
Добавить защитную проверку перед фрагментом, поскольку она напечатает `native`, потому что компилятор выполняет закомментированное присваивание при выводе типов.
Вопрос 13 из 20
Решение для «Изменение объекта, связанного с val»: Если вызывающему коду не следует менять коллекцию, принимать и возвращать `List<String>`, а изменяемый список держать внутри владельца состояния. Что в нём остаётся не бесплатным?
После правки останется ограничение: Она напечатает `native`, потому что компилятор выполняет закомментированное присваивание при выводе типов.
Неизменяемый внешний контракт упрощает рассуждение о состоянии, хотя иногда требует копии или отдельного слоя мутации.
Решение оправдано лишь при условии: Код не компилируется, потому что `val` запрещает вызывать изменяющие методы объекта.
Главная цена решения — необходимость учитывать, что возникнет `UnsupportedOperationException`, так как список создан через `mutableListOf`.
Обратная сторона изменения состоит в том, что она напечатает только `jvm`, поскольку `+=` для `val` игнорируется.