Val et Var à Kotlin

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

j'ai parcouru ce lien:

https://kotlinlang.org/docs/reference/properties.html

comme indiqué sur ce lien:

La syntaxe complète d'une propriété en lecture seule déclaration diffère d'un mutable un dans deux sens: il commence par val au lieu de var et ne pas autoriser 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 duplicata de Variables en Kotlin, différences avec Java. var vs val? comme je demande au sujet du doute lié à la exemple dans la documentation, et pas seulement en général.

145
demandé sur Akshar Patel 2017-05-26 14:11:18

30 réponses

dans votre code result ne change pas, ses propriétés var 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 le même que le modificateur final en java. Comme vous devez probablement savoir que nous ne pouvons pas attribuer à une variable final encore une fois, mais peut changer ses propriétés.

122
répondu chandil03 2017-05-26 16:37:40

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

var est comme variable générale et sa connue comme une variable mutable dans kotlin et peut être assignée plusieurs fois.

val est comme constante variable et son connu comme immuable dans kotlin et peut être initialisé qu'une seul fois.

pour plus d'informations qu'est-ce que val et var s'il vous plaît voir ci-dessous lien

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

70
répondu Patel Pinkal 2017-06-29 09:53:04

variables définies avec var sont mutables (lire et écrire)

variables définies avec val sont immuables (lire seulement)

Kotlin peut supprimer findViewById et réduire le code pour setOnClickListener dans android studio. Pour référence complète: Kotlin en vedette

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

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

utiliser var lorsque la valeur change fréquemment. Par exemple, lors de la localisation de l'appareil android

var integerVariable : Int? = null

utiliser val s'il n'y a pas de changement de valeur dans l'ensemble de la classe. Par exemple, vous voulez définir le texte de textview ou de button de façon programmatique.

val stringVariables : String = "Button's Constant or final Text"
15
répondu user6435056 2018-06-29 13:54:44

val utiliser pour déclarer la variable finale. Caractéristiques des variables val 1519100920"

  1. doit être initialisé
  2. La valeur
  3. ne peut pas être changée ou réattribué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 variable locale]

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

enter image description here

val dans kotlin est comme final mot clé java

9
répondu 2017-08-23 13:47:42

simplement penser Val comme Variable finale en java

6
répondu Connecting life with Android 2017-08-16 10:05:51

simplement, var (mutable) et val (valeurs inaltérables comme en Java (final modificateur))

var x:Int=3
x *= x

//gives compilation error (val cannot be re-assigned)
val y: Int = 6
y*=y
5
répondu huseyin 2017-05-30 10:53:39

val est immutable et var est mutable à Kotlin.

5
répondu Samir Mangroliya 2017-06-04 07:58:04

vous pouvez facilement le penser comme:

var est utilisé pour le setter (valeur va changer).

val est utilisé pour de lecture (lecture seule, la valeur ne change pas).

3
répondu Ling Boo 2017-05-28 02:07:17

val la propriété est similaire à la propriété finale en Java. Vous êtes autorisé à attribuer une valeur seulement pour un temps. Lorsque vous essayez de le réaffecter à une valeur pour la deuxième fois, vous obtiendrez une erreur de compilation. Tandis que la propriété var est mutable que vous êtes libre de la réassigner quand vous le souhaitez et pour toutes les fois que vous voulez.

3
répondu Halil RAŞO 2018-01-03 06:26:28
+----------------+-----------------------------+---------------------------+
|                |             val             |            var            |
+----------------+-----------------------------+---------------------------+
| Reference type | Immutable(once initialized  | Mutable(can able to change|
|                | can't be reassigned)        | value)                    |
+----------------+-----------------------------+---------------------------+
| Example        | val n = 20                  | var n = 20                |
+----------------+-----------------------------+---------------------------+
| In Java        | final int n = 20;           | int n = 20;               |
+----------------+-----------------------------+---------------------------+

référence

3
répondu Joby Wilson Mathews 2018-03-31 15:05:24

avez-vous besoin de changer une variable ou fixe de façon permanente? Un bon exemple si c'est quelque chose comme" val pi5places = 3.14159 " vous le définiriez comme val. S'il y a une possibilité que vous devez changer cette variable maintenant ou plus tard, alors vous la définiriez comme var. Par exemple, la couleur d'une voiture, peut être "var colorCar = vert". Plus tard, vous pouvez changer que colorCar = bleu, où en tant que val, vous ne pouvez pas.

réponses ici concernant mutable et immuable est bien, mais peut être effrayant si ces termes ne sont pas bien connus ou juste en train d'apprendre comment programmer.

2
répondu teckeon 2017-08-16 18:06:35

les Variables sont déclarées en utilisant val ou var , à condition qu'elles soient immuables ou mutables

une chose intéressante de Kotlin est que la plupart du temps vous n'aurez pas besoin de spécifier le type des objets avec lesquels vous travaillez, tant que le compilateur peut le déduire.

donc nous avons juste besoin d'écrire var ou val en fonction du type de variable que nous voulons générer, et le type peut normalement être déduit. Nous pouvons toujours spécifier une type de manière explicite.

Var-Variable-l'objet stocké dans la variable peut changer (varier) dans le temps.

Val-Value-l'objet stocké dans val, ne pouvait pas varier dans le temps. Une fois assignée, la val devient lecture seule, comme une constante dans le langage de programmation Java. Les propriétés de l'objet (Val) peut être changé, mais l'objet lui-même est en lecture seule.

fun main(args: Array<String>) {
val numberOfHoursInDay = 24
print("Number Of Hours Passed for the day : "+numberOfHoursInDay)
// after an hour
numberOfHoursInDay = 25
print("\nNumber Of Hours Passed for the day : "+numberOfHoursInDay)}

sortie:

erreur: (5, 5) Kotlin: Val ne peut pas être réaffecté

nous allons examiner un exemple où nous allons déclarer un objet à val et essayer de changer les valeurs de ses propriétés.

fun main(args: Array<String>) {
    val book = Book("The Last Sun",250)
    print(book)
    book.name = "Incredible Hulk"
    print("\n"+book)
}

data class Book(var name: String = "", var price: Int = 0)

sortie:

Livre (nom=Le Dernier soleil, Prix = 250) Livre(nom=Incroyable Hulk,> prix=250)

2
répondu Ranjith Rayapati 2018-02-10 06:48:44

si nous déclarons la variable en utilisant val alors ce sera variable en lecture seule variable. Nous ne pouvons pas changer la valeur. C'est comme final variable de Java . C'est immutable .

mais si nous déclarons la variable en utilisant var alors ce sera une variable que nous pouvons lire ou écrire . Nous pouvons changer la valeur. C'est mutable .

data class Name(val firstName: String, var lastName: String)

fun printName(name: Name): Name {
    val myName = Name("Avijit", "Karmakar") // myName variable is read only
    // firstName variable is read-only. 
    //You will get a compile time error. Val cannot be reassigned.
    myName.firstName = myName.firstName
    // lastName variable can be read and write as it's a var.
    myName.lastName = myName.lastName
    return myName
}

val ne peut pas être initialisé récemment par le mot-clé lateinit mais non-primitif var peut être initialisé récemment par le mot-clé lateinit .

2
répondu Avijit Karmakar 2018-07-07 17:32:03

val comme constant variable, elle-même ne peut pas être changée, seulement peut être lu, mais les propriétés d'un val peut être modifié; var comme la variable mutant dans d'autres langages de programmation.

1
répondu suyanlu 2018-02-10 07:17:59

à la fois, val et var peuvent être utilisés pour déclarer des variables (propriétés locales et de classe).

variables locales :

  1. val déclare lecture seule variables qui ne peut être attribuée qu'une fois, mais ne peut être réattribué .

exemple:

val readonlyString = “hello”
readonlyString = “c u” // Not allowed for `val`
  1. var déclare reassignable variables comme vous le savez de Java (le mot-clé sera introduit dans Java 10, "variable locale de l'inférence de type" ).

exemple:

var reasignableString = “hello”
reasignableString = “c u” // OK

Il est toujours préférable d'utiliser val . Essayez d'éviter var aussi souvent que possible!

des propriétés de la Classe :

les deux mots clés sont également utilisés pour définir propriétés à l'intérieur des classes . À titre d'exemple, jetez un coup d'oeil à data class :

data class Person (val name: String, var age: Int)

le Person contient deux champs, dont l'un est readonly ( name ). Le age , d'autre part, peut être réassigné après instanciation de la classe, via le setter fourni . Notez que name n'aura pas de méthode de setter correspondante.

1
répondu s1m0nw1 2018-03-26 08:01:51

val est immuable, finale, la première valeur attribuée ne peut pas être changée.

val name:String = "andy"

name = "thomas" //Error: Val cannot be reassigned

var est mutable, réassignable, vous pouvez changer la valeur encore et encore.

val a:Int = 1
var b:Int = 1
println("${a + b}") // output 2

b = 4
println("${a + b}") // output 5

je pense que la façon la plus facile de s'en souvenir:

val = final variable

var = variable reassignable, ou à l'opposé de val.

1
répondu Wahyu Anggara Raya 2018-04-15 17:10:12

Var – Variable – l'objet stocké dans la variable peut changer (varier) dans le temps.

Val – valeur – l'objet stocké dans val, ne pouvait pas varier dans le temps. Une fois assigné, le val devient lecture seule, comme une constante dans le langage de programmation Java.

par exemple:

  fun main(args:Array<String>){
        var numberOfHoursPassed=3
        print("Number of hours passed: $numberOfHoursPassed")

        //After 10 hours
        numberOfHoursPassed=13 //value of var can be changed
        print("Number of hours passed: $numberOfHoursPassed")
    }

sortie:

Number of hours passed: 3
Number of hours passed: 13

alors que si nous réaffectons une valeur à val , puis erreur de compilation se produit comme,

Erreur

: - Val ne peut pas être réaffecté.

ainsi pour conclure, var pourrait être changé à n'importe quel niveau. Alors que val une fois assignée, ne pouvait pas être changée, mais ses propriétés pouvaient être changées.

référence: https://www.tutorialkart.com/kotlin/val-vs-var-in-kotlin /

1
répondu hetsgandhi 2018-07-04 05:52:11

en bref, val la variable est finale (Non mutable) ou constante valeur qui ne sera pas changée dans le futur et var variable (mutable) peut être modifié à l'avenir.

class DeliveryOrderEvent(val d : Delivery)
// Only getter

voir le code ci-dessus. Il s'agit d'une classe de modèle, qui sera utilisée pour la transmission des données. J'ai placé val avant la variable parce que cette variable a été utilisée pour obtenir les données.

class DeliveryOrderEvent(var d : Delivery)

// setter and getter is fine here. No error

aussi, si vous besoin de définir des données plus tard, vous devez utiliser var mot-clé avant une variable, si vous n'avez besoin d'obtenir la valeur qu'une seule fois, puis utiliser val mot-clé

1
répondu Shaon 2018-08-26 06:17:07

Normal .

Val utilise pour le champ statique comme en Java comme mot-clé statique

Comme Statique en Java/ Même que dans kotlin

&

Var indique champ Variable dans Kotlin que, vous pouvez le changer .

quasi-Statique est utilisé lorsque vous voulez enregistrer la valeur dans la mémoire statique à la fois,

si vous assignez

val=1 a=3 U ne peut pas changer it

vous ne pouvez pas changer , c'est la valeur finale et Statique

var B=2 b=4 U peut la changer

1
répondu zafar hussain 2018-09-24 06:07:46

grand Article pour comprendre val et var à kotlin

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

0
répondu Aamir Khan 2017-06-19 04:05:49

les deux sont variables la seule différence est que variable Mutable et variable immuable et il n'y a plus de différence. var est variable Mutable et val est immuable.Dans le langage simple var peut changer la valeur est après l'initialisation la valeur val est constante et elle ne peut pas changer la valeur après l'initialisation la valeur.

0
répondu Nick 2018-01-04 12:37:26

val (à partir de la valeur): Immuable de référence. Une variable déclarée avec val ne peut pas être réaffecté après avoir été initialisé. Il correspond à une variable final en Java.

var ): Référence Mutable. La valeur d'une telle variable peut être changée. Cette déclaration correspond à une variable Java régulière (non-finale).

0
répondu Gulzar Bhat 2018-01-06 09:45:18

val et var sont tous deux utilisés lorsque nous voulons déclarer une variable. mais la différence entre val et var sont

1.quand vous déclarez une variable comme val que son immuable, ce qui signifie que vous ne pouvez pas changer sa valeur (son final maintenant comme en java)

exemple: -

val value=100

value=200 //compile time error
  1. lorsque vous déclarez une variable comme val que vous devez initialiser la variable au moment de la déclaration

exemple

val value=100 //you have to initialize it here only 

mais dans le cas de var

  1. vous pouvez initialiser la variable d'après la déclaration, mais vous devez définir le type de données au moment de la déclaration.

exemple: -

var value:Int //you can initialize it anytime

value=100    //initialized here
  1. , vous pouvez modifier sa valeur à tout moment en cas de besoin

exemple: -

var value=100

value= 200 //changed its value and code will compile happily 
0
répondu Shubham Mittal 2018-01-30 19:59:01

les deux variables sont utilisées pour initialiser

  • val comme une variable constante, elle peut être lisible, et les propriétés d'une val peuvent être modifiées.

  • var comme une variable mutable. vous pouvez modifier la valeur à tout moment.

0
répondu Nikhil Katekhaye 2018-04-19 05:45:53

var et val sont des mots-clés qui sont utilisés pour déclarer une variable dans Kotlin. Mais il y a une petite différence entre eux comme mentionné ci-dessous.

var: utilisé pour déclarer une variable mutable. Cela signifie que la valeur de variable peut être changée plusieurs fois.

val: utilisé pour déclarer une variable en lecture seule. Cela signifie qu'une fois que la valeur est assignée à variable, cela ne peut pas être changé plus tard.

val est le même que le mot-clé final dans Java.

0
répondu 2018-05-05 11:00:16

Var signifie Variable - si vous avez stocké un objet en utilisant 'var' cela pourrait changer dans le temps.

par exemple:

fun main(args: Array<String>) {
    var a=12
    var b=13
    var c=12
    a=c+b **//new object 25**
    print(a)
}

Val signifie valeur - c'est comme un "constante en java .si vous avez stocké n'importe quel objet en utilisant 'val' il ne pouvait pas changer dans le temps.

Par Exemple:

fun main(args: Array<String>) {
    val a=12
    var b=13
    var c=12
    a=c+b **//You can't assign like that.it's an error.**
    print(a)
}
0
répondu NHB SOHEL 2018-05-10 05:30:58

VAR est utilisé pour créer la variable dont la valeur changera au cours du temps dans votre application. Il est identique à VAR de swift, tandis que VAL est utilisé pour créer ces variables dont la valeur ne changera pas au cours du temps dans votre application.C'est comme pour swift.

0
répondu Ashutosh Shukla 2018-05-29 14:05:47

val-immuable (une fois initialisé ne peut pas être réaffecté)

var-Mutable (peut changer de valeur)

exemple

in Kotlin-val n = 20 & var n =20

en Java - final int n = 20; & int n = 20;

0
répondu Najib Puthawala 2018-06-06 07:56:51

les deux var et val sont des mots clés qui sont utilisés pour déclarer une variable dans Kotlin. Mais il y a une petite différence entre eux-

var: utilisé pour déclarer une variable mutable. Cela signifie que la valeur d'une variable peut être changée plusieurs fois.

val: utilisé pour déclarer une variable en lecture seule. Cela signifie qu'une fois que la valeur est assignée à une variable, cela ne peut pas être changé plus tard.

val est la même que comme le mot-clé final en Java.

Par Exemple: -

var v1 = 10
v1 = 20 //works fine

val v2 = 15
v2 = 30 //it will show error, "Val cannot be reassigned"
0
répondu Kuldeep Sharma 2018-06-12 11:54:35

var est une variable mutable et peut être assignée plusieurs fois et val est variable immuable et ne peut être intialisée qu'une seule fois.

0
répondu Yohan Malshika 2018-06-15 07:21:46