parámetro de function final o val o en Kotlin?

¿Por qué Kotlin eliminó el parámetro de function final o val, que es muy útil en Java?

fun say(val msg: String = "Hello World") { msg = "Hello To Me" // would give an error here since msg is val //or final ... ... ... } 

Los parameters de la function Kotlin son finales. No hay val o palabra key final porque esa es la opción pnetworkingeterminada (y no se puede cambiar).

Después de la compatibilidad con Kotlin M5.1 de los parameters mutables eliminados, en versiones anteriores que se pueden lograr usando

 fun foo(var x: Int) { x = 5 } 

De acuerdo con los desarrolladores de Kotlin, las principales razones para eliminar esta característica están a continuación:

  1. La razón principal es que esto era confuso: las personas tienden a pensar que esto significa pasar un parámetro por reference, que no admitimos (es costoso en time de ejecución).

  2. Otra fuente de confusión son los constructores primarios: "val" o "var" en una statement de constructor significa algo diferente de lo mismo si una statement de function (es decir, crea una propiedad).

  3. Además, todos sabemos que los parameters de mutación no son buenos, por lo que escribir "val" o "var" delante de un parámetro en una function, catch block for-loop ya no está permitido.

Resumen : todos los valores de los parameters son val ahora. Debes introducir una variable separada para reinicializar. Ejemplo –

 fun say(val msg: String) { var tempMsg = msg if(yourConditionSatisfy) { tempMsg = "Hello To Me" } } 
  • Error checkParameterIsNotNull en muestra de actividad de inicio de session
  • Asegurar que se inicializa un valor en Kotlin
  • Kotlin, generics y una function que puede no tener arguments
  • Crear una instancia de una class concreta de Java que use generics recursivos en Kotlin
  • ¿Por qué el tipo de expresión objectOfTypeT :: class es KClass <out T>?
  • Kotlin - getPendingIntent con syntax de múltiples indicadores
  • ¿Por qué Kotlin no apoya al "operador ternario"?
  • Sin setter / getter para objects Firebase
  • ¿Cómo convierto un dígito Char (0-9) a su valor numérico?
  • Kotlin lazy var throwing ClassCastException: kotlin.UNINITIALIZED_VALUE
  • Constantes en Kotlin: ¿cuál es una forma recomendada de crearlos?