Для хранения данных в программе в Kotlin, как и в других языках программирования, применяются переменные. Переменная представляет именованный участок памяти, который хранит некоторое значение.
Каждая переменная характеризуется определенным именем, типом данных и значением. Имя переменной представляет поизвольный идентификатор, который может содержать алфавитно-цифровые символы или символ подчеркивания и должен начинаться либо с алфавитного символа, либо со знака подчеркивания. Для определения переменной можно использовать либо ключевое слово val, либо ключевое слово var.
Формальное определение переменной:
val|var имя_переменной: тип_переменной
Вначале идет слово val или var, затем имя переменной и через двоеточие тип переменной.
Например, определим переменную age:
var age: Int
То есть в данном случае объявлена переменная age, которая имеет тип Int. Тип Int говорит о том, что переменная будет содержать целочисленные значения.
После определения переменной ей можно присвоить значение:
fun main() { var age: Int age = 23 println(age) }
Для присвоения значения переменной используется знак равно. Затем мы можем производить с переменной различные операции. Например, в данном
случае с помощью функции println()
значение переменной выводится на консоль. И при запуске этой программы на консоль будет выведено число 23.
Присвоение значения переменной должно производиться только после ее объявления. И также мы можем сразу присвоить переменной начальное значение при ее объявлении. Такой прием называется инициализацией:
fun main() { var age: Int = 23 println(age) }
Однако обязательно надо присвоить переменной некоторое значение до ее использования:
fun main() { var age: Int println(age)// Ошибка, переменная не инициализирована }
Выше было сказано, что переменные могут объявляться как с помощью слова val, так и с помощью слова var. В чем же разница между двумя этими способами?
С помощью ключевого слова val определяется неизменяемая переменная (immutable variable) или переменная только для чтения (read-only). То есть мы можем присвоить значение такой переменной только один раз, но изменить его после первого присвоения мы уже не сможем. Например, в следующем случае мы получим ошибку:
fun main() { val age: Int age = 23 // здесь норм - первое присвоение age = 56 // здесь ошибка - переопределить значение переменной нельзя println(age) }
А у переменной, которая определена с помощью ключевого слова var мы можем многократно менять значения (mutable variable):
fun main() { var age: Int age = 23 println(age) age = 56 println(age) }
Поэтому если не планируется изменять значение переменной в программе, то лучше определять ее с ключевым словом val.
Также Kotlin поддерживает константы времени компиляции. Для их определения применяются ключевые слова const val:
const val maxAge = 120 // константа fun main() { println(maxAge) }
В данном случае maxAge
является константой.
Отличительной особенностью констант является то, что они на стадии компиляции должны иметь некоторое значение, и это значение изменить нельзя. Это накладывает на использование констант ряд ограничений:
Естественно нельзя изменить значение константы:
const val maxAge = 120 // константа fun main() { maxAge = 1500 // ошибка println(maxAge) }
Здесь при попытке присвоения константе maxAge нового значения в функции main мы столкнемся с ошибкой на стадии компиляции. Если мы работаем в среде Intellij IDEA или Android Studio, то уже при написании кода на подобные ошибки укажет сама среда разработки.
Константа должна объявляться на самом верхнем уровне (вне класса/функции):
fun main() { const val maxAge = 120 // ошибка println(maxAge) }
Тип данных константы должен соответствовать одному из примитивных (например, Int) или типу String
Также стоит отметит отличие val-переменных от констант (const val): значение val-переменных устанавливается во время выполнения, а значение констант - во время компиляции. Значение val-переменной также нельзя изменить после установки, однако мы можем объявить val-переменную, а потом дальше в программе присвоить ей значение. Константе же необходимо присвоить значение сразу при определении.