Ответ 1
Параметры функции Котлина являются окончательными. Нет ключевого слова val или final, поскольку оно по умолчанию (и не может быть изменено).
Почему Kotlin удаляет параметр final или val, который очень полезен в Java?
fun say(val msg: String = "Hello World") {
msg = "Hello To Me" // would give an error here since msg is val
//or final
...
...
...
}
Параметры функции Котлина являются окончательными. Нет ключевого слова val или final, поскольку оно по умолчанию (и не может быть изменено).
После поддержки измененных параметров Kotlin M5.1, в более ранних версиях, которые можно достичь с помощью
fun foo(var x: Int) {
x = 5
}
По словам разработчиков Kotlin, основные причины удаления этой функции ниже -
Основная причина заключается в том, что это путано: люди склонны думать, что это означает передачу параметра по ссылке, которую мы не поддерживаем (это дорого стоит во время выполнения).
Другим источником путаницы являются первичные конструкторы: "val" или "var" в объявлении конструктора означает нечто отличное от того же самого, если объявления функций (а именно, оно создает свойство).
Кроме того, мы все знаем, что мутирующие параметры не являются хорошим стилем, поэтому запись "val" или "var" infront параметра в функцию блокирует блокировку for-loop.
Сводка. Теперь все значения параметров val
. Вы должны ввести отдельную переменную для повторной инициализации. Пример -
fun say(val msg: String) {
var tempMsg = msg
if(yourConditionSatisfy) {
tempMsg = "Hello To Me"
}
}