¿Cuál es la diferencia entre properties y parameters en Kotlin?

Aquí hay un ejemplo simple de una class con algunos códigos (properties) dentro del paréntesis

class Person(firstName: String) { .... } 

Ahora aquí hay un ejemplo de una function con algún código (parameters) dentro del paréntesis

 fun double(x: Int) { ... } 

Sé que esta es una pregunta fundamental, pero estoy bastante confundido como principiante.

Pasas parameters a funciones y constructores, y las classs tienen properties .

El constructor de la class Person en su ejemplo tiene un único parámetro, y también lo hace la double function. En este caso, el parámetro firstName no es una propiedad.

Para convertirlo en una propiedad, debe declararlo así:

 class Person(firstName: String) { val firstName : String = firstName } 

Kotlin permite que esto sea más corto, lo que hace que el parámetro firstName sirva como una propiedad:

 class Person(val firstName: String) 

las properties y los parameters son diferentes piensa:

parameters : cuando declaramos cualquier function:

 fun sum(a: Int, b: Int): Int { return a + b } 

Función que tiene dos parameters Int con tipo de retorno Int:

Propiedades y campos:

Declarando properties

Las classs en Kotlin pueden tener properties. Estos pueden declararse como mutables, usando la palabra key var o de solo lectura usando la palabra key val .

 class Address { var name: String = ... var street: String = ... var city: String = ... var state: String? = ... var zip: String = ... } 

Para usar una propiedad, simplemente nos referimos a ella por su nombre, como si fuera un campo en Java:

 fun copyAddress(address: Address): Address { val result = Address() // there's no 'new' keyword in Kotlin result.name = address.name // accessors are called result.street = address.street // ... return result } 

La syntax completa para declarar una propiedad es:

 var <propertyName>[: <PropertyType>] [= <property_initializer>] [<getter>] [<setter>] 

Primero, su firstName también es un parámetro en lugar de una propiedad en la class Person .

 // v-- a parameter declanetworking on primary constructor class Person(firstName: String) 

puede acceder a un parámetro declarado en el constructor primario en el bloque de init o en la statement de propiedad / campo, por ejemplo:

 class Person(firstName: String){ val first:String init{ first=firstName } } class Person(firstName: String){ val first:String = firstName } class Person(firstName: String){ @JvmField val first:String = firstName } 

para hacer el primer firstName de una propiedad que pueda usando la palabra key val o var , por ejemplo:

 // v--- immutable property class Person(val firstName: String) // v--- mutable property class Person(var firstName: String) 

una propiedad Kotlin generará getter / setter (?) y un campo de respaldo (?) para el código byte de Java. Tome un ejemplo de una propiedad mutable al código de byte de Java de la siguiente manera:

 public final class Person{ private String firstName; // backing field // v--- parameter public Person(String firstName){ this.firstName = firstName; } //getter public final String getFirstName(){ return firstName; } //setter public final String setFirstName(String firstName){ this.firstName= firstName; } } 

un parámetro solo visible en el ámbito de la function / ámbito del constructor, excepto el parámetro declarado en el constructor primario.

Nota : un parámetro es inmutable como java effective-final variables / parameters, por lo que no puede reasignar ningún parámetro en Kotlin, por ejemplo:

 fun foo(bar:String){ bar = "baz" // ^--- compile error } 
  • La igualdad de class Kotlin falla
  • Error en data-binding-validator por Ilhasoft + Kotlin
  • Clase Kotlin que implementa el error de la interfaz de Java
  • ¿Cómo implementar una propiedad que proviene de una fuente determinada hasta que se establece directamente en Kotlin?
  • Extensiones de Kotlin para Android y menu
  • Travis CI: Maven no consigue la dependencia de Kotlin 1.1.1 en Linux
  • ¿Cómo manejar la accesibilidad en la vista personalizada cuando no está diseñada para manejar clics?
  • Kotlin en la conversión a la class genérica
  • ¿Cómo esconder el campo de respaldo de Var lateinit de Kotlin desde Java?
  • El ejemplo de Kotlin Quasar no funciona
  • Inicio de session automático de Firebase para Android