358 votes

Quelle est la différence entre var et val en Kotlin ?

Quelle est la différence entre var et val en Kotlin ?

J'ai parcouru ce lien :

KotlinLang : Propriétés et champs

Comme indiqué sur ce lien :

La syntaxe complète d'une déclaration de propriété en lecture seule diffère d'une propriété d'une propriété mutable : elle commence par val au lieu de var et ne permet pas et ne permet pas l'utilisation d'un setter.

Mais juste avant, il y a un exemple qui utilise un setter.

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
}

Quelle est la différence exacte entre var et val ?

Pourquoi avons-nous besoin des deux ?

C'est pas un doublon de Variables en Kotlin, différences avec Java : var' ou 'val' ? car je pose des questions sur les doutes liés à l'exemple particulier de la documentation, et pas seulement en général.

6 votes

result ne peut pas être modifié pour se référer à une instance différente de l'élément Address mais l'instance à laquelle il fait référence peut toujours être modifiée. La même chose serait vraie en Java si vous aviez un objet final Address result = new Address();

0 votes

0 votes

Je suis venu chercher la réponse ici parce que le site Kotlin qui décrit les variables en premier était trop bête pour le mentionner : kotlinlang.org/docs/reference/syntaxe de base.html

308voto

chandil03 Points 6342

Dans votre code result ne change pas, son var les propriétés changent. Voir les commentaires ci-dessous :

fun copyAddress(address: Address): Address {
    val result = Address() // result is read only
    result.name = address.name // but not their properties.
    result.street = address.street
    // ...
    return result
}

val est identique à la final modificateur en java. Comme vous le savez sans doute, on ne peut pas assigner à un objet final mais peut modifier ses propriétés.

1 votes

Val et var dans les fonctions et les classes ou dans le constructeur primaire ont une signification différente ?

3 votes

Non, c'est partout pareil.

0 votes

Mais lorsque je déclare une variable avec var dans la classe, elle nécessite une initialisation car elle déclare la propriété. Mais dans la fonction, l'initialisation n'est pas requise, pourquoi ?

179voto

Patel Pinkal Points 1432

val et var Les deux sont utilisés pour déclarer une variable.

var c'est comme généralités et c'est connu comme une variable mutable en kotlin et peut être attribué plusieurs fois.

val c'est comme Final et il est connu comme immuable en kotlin et ne peut être initialisé qu'une seule fois.

Pour plus d'informations sur ce qu'est val et var veuillez voir le lien ci-dessous

http://blog.danlew.net/2017/05/30/mutable-vals-in-kotlin/

28voto

user6435056 Points 433

Les variables définies avec les var sont mutables (lecture et écriture)

les variables définies avec val sont immuables(Lecture seule)

Kotlin peut supprimer findViewById et réduire le code pour setOnClickListener dans Android studio. Pour une référence complète : Les fonctionnalités géniales de Kotlin

la valeur des variables mutables peut être modifiée à tout moment, alors que vous ne pouvez pas modifier la valeur des variables immuables.

où dois-je utiliser var et où val ?

utiliser var lorsque la valeur change fréquemment. Par exemple, pour obtenir l'emplacement d'un appareil Android

var integerVariable : Int? = null

utiliser val lorsqu'il n'y a pas de changement de valeur dans la classe entière. Par exemple, vous voulez définir le texte d'une fenêtre de texte ou d'un bouton de manière programmatique.

val stringVariables : String = "Button's Constant or final Text"

21 votes

"Kotlin peut supprimer findViewById et réduire le code pour setOnClickListener dans Android studio. Pour une référence complète : Kotlin awesome features" En quoi cela est-il pertinent pour la question posée ?

6 votes

Les variables val ne sont pas nécessairement immuables. Elles sont finales -- seule la référence est immuable -- mais si l'objet stocké dans la val est mutable, l'objet est mutable indépendamment du fait qu'il soit assigné via val ou var.

1 votes

Je ne vois pas l'intérêt d'introduire deux nouveaux mots-clés alors que cela pouvait être fait de manière beaucoup plus compréhensible auparavant en Java.

19voto

val à utiliser pour déclarer une variable finale. Caractéristiques de val variables

  1. Doit être initialisé
  2. la valeur ne peut pas être modifiée ou réaffectée enter image description here

var est une variable générale

  1. Nous pouvons initialiser plus tard en utilisant lateinit modificateur

    [ lateinit également utilisé pour la variable globale nous ne pouvons pas l'utiliser pour une variable locale]

  2. la valeur peut être modifiée ou réaffectée mais pas dans la portée globale

enter image description here

val en kotlin c'est comme final mot-clé dans java

17voto

Samir Mangroliya Points 21263

Val est immutable et var est mutable en Kotlin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X