Вал и Вар в Котлине
В чем разница между 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
?
Зачем нам оба?
Это не дубликат переменных в Kotlin, отличия от Java. вар против вал? как я спрашиваю о сомнениях, связанных с конкретным примером в документации, а не только в целом.
50 ответов
В вашем коде 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 подобен общей переменной и известен как изменяемая переменная в kotlin и может быть назначен несколько раз.
val подобен постоянной переменной и известен как неизменяемый в kotlin и может быть инициализирован только один раз.
Для получения дополнительной информации, что это val
а также var
пожалуйста, смотрите ссылку ниже
Переменные, определенные с помощью var, являются изменяемыми (чтение и запись)
переменные, определенные с помощью val, являются неизменяемыми (только для чтения)
Kotlin может удалить findViewById и уменьшить код для setOnClickListener в андроид студии. Для полной справки: Kotlin потрясающие функции
Значение изменяемых переменных может быть изменено в любое время, в то время как вы не можете изменить значение неизменяемых переменных.
где я должен использовать var и где val?
используйте var, где значение часто меняется. Например, при получении местоположения устройства Android
var integerVariable : Int? = null
используйте val, где нет изменений в значении во всем классе. Например, вы хотите установить текстовое представление или текст кнопки программно.
val stringVariables : String = "Button's Constant or final Text"
val
использовать для объявления окончательной переменной. Характеристики val
переменные
var
как общая переменная
Мы можем инициализировать позже, используя
lateinit
модификатор[
lateinit
также использовать для глобальной переменной, мы не можем использовать ее для локальной переменной]- значение может быть изменено или переназначено, но не в глобальной области видимости
val
в kotlin
как final
ключевое слово в java
+----------------+-----------------------------+---------------------------+
| | 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; |
+----------------+-----------------------------+---------------------------+
Вы можете легко думать это как:
var
используется для установки (значение изменится).
val
используется для получения (только для чтения, значение не изменится).
Проще говоря, var (mutable) и val (неизменяемые значения, как в Java (модификатор final))
var x:Int=3
x *= x
//gives compilation error (val cannot be re-assigned)
val y: Int = 6
y*=y
Сравнение val
до финала неправильно!
var
s изменчивы val
s доступны только для чтения; Да, val нельзя переназначить так же, как переменные final из Java, но они могут возвращать другое значение с течением времени, поэтому говорить, что они неизменяемы, неправильно;
Рассмотрим следующие
var a = 10
a = 11 //Works as expected
val b = 10
b = 11 //Cannot Reassign, as expected
Так что хорошо!
Теперь рассмотрим следующее для val
s
val d
get() = System.currentTimeMillis()
println(d)
//Wait a millisecond
println(d) //Surprise!, the value of d will be different both times
Следовательно, vars могут соответствовать нефинальным переменным из Java, но val тоже не совсем конечные переменные;
Хотя есть const
в котлине, что может быть похоже final
, поскольку они являются константами времени компиляции и не имеют специального получателя, но работают только с примитивами
Просто подумайте, что Val, как окончательная переменная в Java
В принципе
var
= переменная, поэтому она может изменитьсяval
= значение, поэтому оно не может измениться.
Если мы объявим переменную, используя 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
но не примитивно var
может быть инициализирован в последнее время по ключевому слову lateinit
,
В котлине
val
это свойство только для чтения, доступ к которому может получить только получатель.val
неизменен.
val
пример:
val piNumber: Double = 3.1415926
get() = field
Тем не мение,
var
является свойством чтения и записи, поэтому к нему может обращаться не только получатель, но и установщик.var
изменчиво
var
пример:
var gravity: Double = 9.8
get() = field
set(value) {
field = value
}
Если вы попытаетесь изменить неизменный val
, IDE покажет вам ошибку:
fun main() {
piNumber = 3.14 // ERROR
println(piNumber)
}
// RESULT: Val cannot be reassigned
Но изменчивый var
может быть изменено:
fun main() {
gravity = 0.0
println(gravity)
}
// RESULT: 0.0
Надеюсь это поможет.
var похож на общую переменную и может быть назначен несколько раз и известен как изменяемая переменная в Kotlin. В то время как val является постоянной переменной и не может быть назначена несколько раз и может быть инициализирована только один раз и известна как неизменяемая переменная в Kotlin.
Val: назначается один раз (только чтение)
Вар: изменчивый
пример: определить переменную для хранения значения userId:
val userId = 1
если мы пытаемся изменить переменную userId, вы получите сообщение об ошибке
userId = 2
error: val cannot be reassigned // Error message!
Создадим новую переменную для хранения имени пользователя:
var userName = "Nav"
если вы хотите переназначить значение userName, вы можете легко это сделать, потому что var является изменяемым
userName = "Van"
и теперь значение userName - «Ван».
Для получения дополнительной информации посетите это:https://medium.com/techmacademy/kotlin-101-val-vs-var-behind-the-scenes-65d96c6608bf
Значение для val
Переменная может быть назначена только один раз.
val address = Address("Bangalore","India")
address = Address("Delhi","India") // Error, Reassigning is not possible with val
Хотя вы не можете переназначить значение, но вы, безусловно, можете изменить свойства объекта.
//Given that city and country are not val
address.setCity("Delhi")
address.setCountry("India")
Это означает, что вы не можете изменить ссылку на объект, на который указывает переменная, но базовые свойства этой переменной могут быть изменены.
Значение переменной var можно переназначать столько раз, сколько вы хотите.
var address = Address("Bangalore","India")
address = Address("Delhi","India") // No Error , Reassigning possible.
Очевидно, что лежащие в его основе свойства могут быть изменены, если они не объявлены как val.
//Given that city and country are not val
address.setCity("Delhi")
address.setCountry("India")
Вам нужно изменить переменную или установить ее навсегда? Хороший пример, если это что-то вроде "val pi5places = 3.14159", вы бы установили его как val. Есть ли вероятность, что вам нужно изменить эту переменную сейчас или позже, тогда вы бы установили ее как var. Например, цвет автомобиля, может быть "var colorCar = green". Позже вы можете изменить это colorCar = синий, где, как val, вы не можете.
Ответы здесь относительно изменчивости и неизменности хороши, но могут быть пугающими, если эти термины не очень хорошо известны или только начинают изучать, как программировать.
Свойствоval похоже на конечное свойство в Java. Вам разрешено присваивать ему значение только один раз. Когда вы попытаетесь переназначить его значением во второй раз, вы получите ошибку компиляции. Принимая во внимание, что свойство var является изменяемым, и вы можете переназначить его, когда пожелаете и в любое время.
Обе переменные используются в качестве инициализации
val, как постоянная переменная, может быть читаемым, а свойства val могут быть изменены.
var как изменяемая переменная Вы можете изменить значение в любое время.
вар:
- Объявите переменную, значение которой можно изменить в любой момент.
- Обычно это используется для объявления переменной с глобальной областью действия.
- Его можно переназначить.
- Его объем не подлежит повторному объявлению.
вал:
- Он используется для определения констант во время выполнения. Основное отличие от const.
- Его нельзя переназначить в своей области действия.
- Его объем не подлежит повторному объявлению.
- Объявление имеет область действия блочной функции.
Два способа создания переменных в KOTLIN VAL и VAR
1.VAL хранит постоянные значения. Также называется финальной переменной
2.VAR хранит изменяемые значения
Var означает переменную - если вы сохранили какой-либо объект, используя 'var', он может измениться со временем.
Например:
fun main(args: Array<String>) {
var a=12
var b=13
var c=12
a=c+b **//new object 25**
print(a)
}
Val означает значение. Это похоже на "константу" в 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)
}
val
лайк constant
переменная, сама не может быть изменена, только может быть прочитана, но свойства val
могут быть изменены;var
точно так же как переменная мутанта в других языках программирования.
val неизменяемый, окончательный, первое назначенное значение не может быть изменено.
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
переменная = переназначаемая переменная или противоположность 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) Kotlin: Val не может быть переназначен
Мы рассмотрим пример, в котором мы объявим объект в 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) Книга (имя = Невероятный Халк,> цена =250)
Var — изменяемая переменная. Это переменная, которую можно изменить на другое значение. Это похоже на объявление переменной в Java.
Val доступен только для чтения. Это похоже на final в java. Значение должно быть инициализировано при его создании. Это связано с тем, что его нельзя изменить после создания.
var test1Var = "Hello"
println(test1Var)
test1Var = "GoodBye"
println(test1Var)
val test2Val = "FinalTestForVal";
println(test2Val);
val
(из значения): Неизменная ссылка. Переменная, объявленная с val
не может быть переназначен после инициализации. Это соответствует final
переменная в Java.
var
(из переменной): изменяемая ссылка. Значение такой переменной можно изменить. Это объявление соответствует обычной (не финальной) переменной Java.
val: должен добавить или инициализировать значение, но не может измениться.var: эта переменная может изменяться в любой строке кода.
Короче говоря, переменная val является конечной (не изменяемой) или постоянной величиной, которая не будет изменена в будущем, а переменная var (изменяемой) может быть изменена в будущем.
class DeliveryOrderEvent(val d : Delivery)
// Only getter
Смотрите приведенный выше код. Это модельный класс, будет использоваться для передачи данных. Я установил val перед переменной, потому что эта переменная использовалась для получения данных.
class DeliveryOrderEvent(var d : Delivery)
// setter and getter is fine here. No error
Также, если вам нужно установить данные позже, вам нужно использовать ключевое слово var перед переменной, если вам нужно получить значение только один раз, тогда используйте ключевое слово val
В котлине мы можем объявить переменную двух типов: val
а также var
.val
не может быть переназначен, он работает как конечная переменная.
val x = 2
x=3 // cannot be reassigned
С другой стороны, var можно переназначить, он изменяемый
var x = 2
x=3 // can be reassigned
VAR используется для создания тех переменных, значение которых будет меняться с течением времени в вашем приложении. Это то же самое, что VAR для swift, тогда как VAL используется для создания переменных, значение которых не изменится с течением времени в вашем приложении. Это то же самое, что LET для swift.