Val и Var в Котлине

в чем разница между var и val в Котлин?

Я прошел по этой ссылке:

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

как указано по этой ссылке:

полный синтаксис объявления свойства только для чтения отличается от изменяемый одним из двух способов: он начинается с val вместо var и делает не позволяйте сеттеру.

но как раз перед пример использования сеттера.

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
}

какова точная разница между var и val?

зачем нам нужны?

Это не дубликат of переменные в Котлине, различия с Java. ВАР против Вэла? поскольку я спрашиваю о сомнениях, связанных с конкретным примером в документации, а не только в целом.

30 ответов


код result не меняется, его var свойства меняются. См. комментарии ниже:

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 то же самое, что final модификатор в java. Как вы, вероятно, знаете, что мы не можем назначить final переменная снова, но может изменить свои свойства.


val и var оба используются для объявления переменной.

var как общие переменная и ее известная как изменяемая переменная в Котлин и может быть назначен несколько раз.

вал как постоянный переменная и ее называют неизменяемой в Котлин и может быть инициализирован только один раз.

для получения дополнительной информации, что составляет val и var пожалуйста, см. ниже ссылку

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


переменные, определенные с var являются изменяемыми (чтение и запись)

переменные, определенные с val неизменяемы (только для чтения)

Котлин может удалить findViewById и уменьшить код для setOnClickListener в Android studio. Для полной справки:Котлин удивительные особенности

значение изменяемых переменных может быть изменено в любое время, в то время как вы не можете изменить значение неизменяемого переменная.

где я должен использовать var и где val ?

используйте var, где значение часто меняется. Например, при получении местоположения устройства android

var integerVariable : Int? = null

используйте val, где нет изменения значения во всем классе. Например, вы хотите установить textview или текст кнопки программно.

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

val используется для объявления конечной переменной. Характеристики val переменные

  1. должен быть инициализирован
  2. значение нельзя изменить или переназначить enter image description here

var является общей переменной

  1. мы можем инициализировать позже, используя lateinit модификатор

    [lateinit использовать для глобальной переменной мы не можем использовать его для местного переменная]

  2. значение может быть изменено или переназначить, но не в глобальной области

enter image description here

val на kotlin как final ключевое слово java


просто подумайте, что Val как конечная переменная в java


просто, var (изменяемый) и val (неизменяемые значения, как в Java (окончательный модификатор))

var x:Int=3
x *= x

//gives compilation error (val cannot be re-assigned)
val y: Int = 6
y*=y

вал immutable и var mutable в Котлин.


вы можете легко думать, как:

var используется для сеттера (стоимость изменится).

val используется для геттера (только для чтения, значение не изменится).


вал свойство похоже на final свойство в Java. Вы можете присвоить ему значение только один раз. При попытке переназначить его со значением во второй раз вы получите ошибку компиляции. В то время как свойство var изменчиво, которое вы можете переназначить, когда захотите и в любое время.


+----------------+-----------------------------+---------------------------+
|                |             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;               |
+----------------+-----------------------------+---------------------------+

ссылка


вам нужно изменить переменную или установить ее перманентно? Хороший пример, если это что-то вроде "val pi5places = 3.14159", вы бы установили его как val. Есть ли вероятность, что вам нужно изменить эту переменную сейчас или позже, тогда вы установите ее как var. Например, цвет автомобиля может быть "var colorCar = green". Позже вы можете изменить этот colorCar = blue, где, как val, вы не можете.

ответы здесь относительно изменчивых и неизменяемых в порядке, но может быть страшно, если эти сроки не известны или просто научиться программировать.


переменные объявляются с использованием val или var при условии , что они неизменяемы или изменяемы

интересная вещь от Kotlin заключается в том, что большую часть времени вам не нужно будет указывать тип объектов, с которыми вы работаете, пока компилятор может сделать вывод.

поэтому нам просто нужно написать var или val в зависимости от типа переменной, которую мы хотим создать, и тип обычно может быть выведен. Мы всегда можем указать тип явно.

var-Variable-объект, хранящийся в переменной, может изменяться (изменяться) во времени.

Val-Value-объект, хранящийся в val, не может изменяться во времени. После назначения val становится только для чтения, как константа в языке программирования Java. Свойства объекта (как Val) могут быть изменены, но сам объект доступен только для чтения.

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)}

выход:

Ошибка: (5, 5) Котлин: вал не может быть переназначен

мы рассмотрим пример, где мы объявим объект val и попробуем изменить значения его свойств.

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)

выход:

книга (имя=последнее солнце, Цена=250) Забронировать (name=Incredible Hulk, > price=250)


если мы объявим переменную с помощью val тогда это будет только для чтения переменной. Мы не можем изменить его значение. Это как финал переменная Java. Это immutable.

но если мы объявим переменную с помощью var тогда это будет переменная, которую мы можем читать или написать. Мы можем изменить его стоимость. Это 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 не может быть инициализирован в последнее время ключевым словом lateinit но не примитивные!--3--> может быть инициализирован в последнее время ключевым словом lateinit.


val Как constant переменная, сама по себе не может быть изменена, только может быть прочитана, но свойства val можно изменить; var так же, как мутантная переменная в других языках программирования.


как val и var может использоваться для объявления переменных (локальных и свойств класса).

локальные переменные:

  1. val объявляет только для чтения переменные, которые могут быть только один раз, но не могут быть переназначены.

пример:

val readonlyString = “hello”
readonlyString = “c u” // Not allowed for `val`
  1. var объявляет переназначаемая переменные, как вы их знаете из Java (ключевое слово будет представлен в Java 10, "вывод типа локальной переменной").

пример:

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

всегда предпочтительнее использовать val. Старайтесь избегать var как можно чаще!

свойства класс:

оба ключевых слова также используются для определения свойства внутри классов. В качестве примера рассмотрим следующее data class:

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

на Person содержит два поля, одно из которых находится в состоянии readonly (name). The age, С другой стороны, может быть переназначен после создания экземпляра класса через предоставленный setter. Обратите внимание, что name не будет иметь соответствующего метода setter.


вал является неизменяемым, окончательным, первое назначенное значение не может быть изменено.

val name:String = "andy"

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

var изменчиво, настраиваемым, вы можете изменить значение снова и снова.

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

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

Я думаю, самый простой способ запомнить это :

val = переменная final

var = переменная переназначаемая или противоположная val.


Var – переменная-объект, хранящийся в переменной, может изменяться (изменяться) во времени.

Вал - Value-объект, хранящийся в val, не может изменяться во времени. После назначения val становится только для чтения, как константа в языке программирования Java.

например:

  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")
    }

выход:

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

в то время как, если мы переназначим любое значение вал, затем возникает ошибка компиляции как,

ошибка: - Val не может быть переназначен.

таким образом, VAR может быть изменен на любом уровне. В то время как val после назначения не может быть изменен, но его свойства могут быть изменены.

ссылка:https://www.tutorialkart.com/kotlin/val-vs-var-in-kotlin/


короче, вал переменная является окончательной (не изменяемой) или постоянной величиной, которая не будет изменяться в будущем и var переменная (изменяемая) может быть изменена в будущем.

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

см. выше код. Это класс модели, будет использоваться для передачи данных. Я установил вал перед переменной, потому что эта переменная использовалась для получения данных.

class DeliveryOrderEvent(var d : Delivery)

// setter and getter is fine here. No error

кроме того, если вам нужно установить данные позже, вам нужно использовать var ключевое слово перед переменной, если вам нужно только получить значение один раз, используйте вал ключевое слово


нормальный .

Val использует для статического поля, как в Java, как статическое Ключевое слово

как статический в Java / такой же, как в kotlin

&

Var обозначает переменное поле в Котлине, которое вы можете изменить .

статичные в основном используется, когда вы хотите сохранить значение в статической памяти сразу,

при назначении

val a=1 a=3 U не может изменить его

вы не можете изменить , это окончательная стоимость и Static

var b=2 b=4 U может изменить его


отличная статья, чтобы понять val и var в Котлине

http://blog.danlew.net/2017/05/30/mutable-vals-in-kotlin/ - Дэн Лью


оба являются переменными единственная разница заключается в том, что изменяемая переменная и неизменяемая переменная и нет ничего больше разницы. var-изменяемая переменная, а val-неизменяемая.В простом языке var может изменить значение is после инициализации значение val является постоянным и не может изменить его значение после инициализации значения.


val (от стоимости): Неизменная ссылка. Переменная, объявленная с помощью val не может быть переназначается после инициализации. Это соответствует final переменная в Java.

var (из переменной): Изменяемая ссылка. Значение такой переменной может быть изменено. Это объявление соответствует регулярной (не окончательной) переменной Java.


val и var оба используются, когда мы хотим объявить переменную. но разница между val и var are

1.когда вы объявляете переменную как val чем его означает, вы не можете изменить его значение (его final теперь как в Java)

пример:

val value=100

value=200 //compile time error
  1. когда вы объявляете переменную как val чем вы должны инициализировать переменную во время объявления

пример

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

но в случае var

  1. вы можете инициализировать переменную, после объявления, но вы должны определить тип данных в момент объявления.

пример:

var value:Int //you can initialize it anytime

value=100    //initialized here
  1. вы можете изменить его значение в любое время, когда требуется

пример:

var value=100

value= 200 //changed its value and code will compile happily 

обе переменные используются в качестве инициализации

  • val как постоянная переменная, она может быть читаемой, и свойства val могут быть изменены.

  • var так же, как изменяемая переменная. вы можете изменить значение в любое время.


и VAR, и val являются ключевыми словами, которые используются для объявления переменной в Kotlin. Но есть небольшая разница между ними, как указано ниже.

var: используется для объявления изменяемой переменной. Это означает, что значение переменной может быть изменено несколько раз.

val: используется для объявления переменной только для чтения. Это означает, что как только значение присваивается переменной, это не может быть изменено позже.

val-это то же самое, что и ключевое слово final в Java.


Var означает переменная - если вы сохранили какой-либо объект с помощью 'var' это может измениться во времени.

например:

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

Вал означает стоимостью-это как 'constant' на java .если вы сохранили какой-либо объект с помощью "val", он не может измениться во времени.

Например:

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)
}

VAR используется для создания тех переменных, значение которых будет меняться с течением времени в вашем приложении. Он такой же, как VAR swift, тогда как VAL используется для создания тех переменных, значение которых не будет меняться с течением времени в вашем приложении.Это то же самое, что и LET of swift.


val-неизменяемый (после инициализации не может быть переназначен)

var-Mutable (смогите способный для изменения значения)

пример

в Котлине-val n = 20 & var n = 20

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


и var и val - ключевые слова, которые используются для объявления переменной в Kotlin. Но между ними есть небольшая разница ... --5-->

var: используется для объявления изменяемой переменной. Это означает, что значение переменной может быть изменено несколько раз.

val: используется для объявления переменной только для чтения. Это означает, что как только значение присваивается переменной, это не может быть изменено позже.

val такое же, как и ключевое слово final в Java.

для Пример: -

var v1 = 10
v1 = 20 //works fine

val v2 = 15
v2 = 30 //it will show error, "Val cannot be reassigned"

var является изменяемой переменной и может быть назначен несколько раз и val является неизменяемой переменной и может быть intialized только один раз.