Конечный параметр или значение функции val или в Kotlin?

Почему 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
    ...
    ...
    ...
}

Ответ 1

Параметры функции Котлина являются окончательными. Нет ключевого слова val или final, поскольку оно по умолчанию (и не может быть изменено).

Ответ 2

После поддержки измененных параметров 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"
    }
}