Что такое переменные?
Если подойти к пониманию переменных абстрактно, можно сказать так, что то, что мы видим на экране компьютеров и смартфонов – в основном это данные в виде чисел и текста. То есть эта информация имеет числовой, строковый и другие типы данных. Они не появляются из ниоткуда, а передаются для отображения на экране в специальных контейнерах – переменных. Это значит, что в программе мы постоянно будем работать с данными, используя такие контейнеры.
Создание val и const val переменной
Для работы с переменной сначала ее необходимо создать и присвоить ей значение. Под капотом при создании переменной выделяется ячейка в памяти компьютера, у которой есть свой специальный тип и адрес. Давайте создадим переменную и поместим в нее какое-нибудь число. Представим, что она хранит в себе количество заказов вымышленного магазина.
val numberOfOrders1: Int = 42
Для объявления переменной в котлине используется ключевое слово val. Далее пишется произвольное название переменной, рекомендуется, чтобы оно было осмысленным, чтобы было понятно, что она хранит в себе или для чего она используется. Обратите внимание на способ написания имени – с маленькой буквы и каждое следующее слово с большой буквы. Этот способ называется camel case и его принято использовать при именовании простых переменных и методов.
Знак Равно (“=”) – это оператор присваивания. В коде всегда данные справа от Равно присваиваются данным слева от Равно. Итак, мы объявили переменную numberOfOrders и присвоили ей значение – 42 (также можно сказать создали или задекларировали переменную и инициализировали ее).
Давайте объявим еще одну переменную и присвоим ей не число, а строку. Пусть переменная хранит в себе какое-нибудь уведомление для пользователя.
var notificationText: String = "Не забудьте маску и перчатки"
Обратите внимание, вносимый в переменную текст заключен в двойные кавычки. Теперь с этими переменными мы можем работать.
Вывод значений переменных на экран. println() — метод вывода в консоль
Итак, теперь распечатаем значение переменных в консоли. Для этого воспользуемся функцией println в которую отправим наши переменные в качестве параметров и запустим программу
println(numberOfOrders1)
println(notificationText)
При этом вывод в консоль будет такой:
42
Не забудьте маску и перчатки!
Хорошо. Теперь представим, что количество заказов изменилось и теперь нам надо отображать новые данные. Для этого присвоим нашей числовой переменной новое значение.
val numberOfOrders1: Int = 52
Запустим программу и увидим, что распечаталось новое значение. Теперь представим, что бизнес требует изменить приветственное сообщение. Давайте заменим его в нашей текстовой переменной на новое.
Обратите внимание, мы не меняем проинициализированное значение. Мы переписываем данные переменной новой информацией, заменяем все в ней имеющееся новым текстом. И вызываем println для вывода в консоли текста этой переменной.
Программа при выполнении двигается сверху вниз построчно и можно проследить ее действия. Объявили текстовую переменную и присвоили значение, распечатали ее, присвоили ей новое значение, снова распечатали уже новый текст. Выводить в консоль два разных значения нам не нужно, поэтому закомментируем старый вызов функции. Для быстрого комментария есть сочетание клавиш — Ctrl + /
notificationText = "Маски больше не потребуются!"
Запускаем. И обнаружим ошибку:
(12, 5): Val cannot be reassigned
Во-первых, при попытке запустить проект в консоли мы видим текст ошибки – “переменная val не может быть переназначена”, во-вторых среда разработки уже ее подсвечивает и предлагает варианты исправления val на изменяемую переменную var. Что мы и сделаем. Запускаем и программа отрабатывает корректно. Почему это произошло?
Переменная, объявленная с помощью ключевого слова val является неизменяемой, константа своего рода. Это значит, что если мы объявили переменную и проинициализировали ее каким-либо значением и после этого попытаемся перезаписать данные в ней (поместить новую информацию), как в данном случае, возникнет ошибка компиляции и программа не запустится. Рекомендуется всегда использовать val переменные, если это позволяет программа.
Создание var переменной
Если же нам нужна переменная, которую можно изменять и перезаписывать, используем ключевое слово – var. В реальной жизни это можно рассматривать как “защита от дурака”, чтобы отличать переменные, которые собирались модифицировать от тех, которые не собирались, когда их настолько много, что в их назначении можно запутаться.
var notificationText: String = "Не забудьте маску и перчатки!"
Поговорим о типах переменных. Когда мы объявляли наши переменные и присваивали им значения, тип автоматически определялся и присваивался переменной согласно передаваемым данным. Но в котлине можно явно указать тип переменной через двоеточие при ее объявлении или вызвав контекстное меню. Явное указание типов бывает особенно полезным, когда нужно разобраться в чужом коде или не запутаться в своем. Явно объявив переменную одного типа, нельзя потом положить в нее данные другого.
Базовые типы данных в Котлин
Существует 4 группы типа данных: числовые, вещественные, строковые и логические. Давайте по порядку. В коде выше мы использовали самый распространенный целочисленный тип данных Int. В группе целочисленных типов есть еще несколько типов, которые различаются только максимально возможным количеством хранимой информации, другими словами тип определяет какое максимальное число может хранить переменная.
1. Числовые
- Int (сокращенное от Integer — целое число) может хранить в себе 32 bit информации. Это числа от -2 147 483 648 до 2 147 483 647 (2 147 483 647 потому что в положительный диапазон входит 0).
Подробно все числовые типы расписывать не буду, моя задача передать принцип. Тезисно пройдемся по остальным. Названия говорят сами за себя.
- Long — может хранить до 64 бит информации
- Short — может хранить до 16 bit информации
- Byte — создаст самую маленькую числовую ячейку в памяти размером 8 бит (или 1 байт)
В идеальном мире каждый тип применяется под заранее известный диапазон рабочих чисел, чтобы не выделять лишнюю неиспользуемую память.
И еще стоит добавить, что можно объявить тип для только для положительных чисел. Он называется Unsigned. Для его объявления добавляется U к типу и к значению в конце.
2. Вещественные типы (или типы с плавающей точкой)
Их два. Double — вмещает 64 bit и Float — вмещает 32 bit информации. Отличаются только вмещаемым размером, но еще важно учитывать один нюанс. По умолчанию если вы присвоите число с плавающей точкой без явного указания типа, оно будет Double. Чтобы явно указать тип Float, следует добавить f к значению.
3. Строковые типы
String — строка. С ней мы уже работали. Это любой набор символов, заключенных в двойных кавычках.
Char — это тип, для хранения только одного текстового символа. Задается в одинарных кавычках.
4. Логические типы
Обозначается как Boolean и может хранить в себе только значения true или false (истина или ложь).
// целочисленные
val intNum1: Int = -2147483648 // 32 bit
val intNum2: Int = 2147483647 // 32 bit
val longNum: Long // 64 bit
val shortNum: Short // 16 bit
val byteNum: Byte // 8 bit
val unsignedNum: UInt = 214748648u // 32 bit
// вещественные
val doubleNum: Double = 234.42 // 64 bit
val floatNum: Float = 847.2f // 32 bit
// строковые
val stringValue: String = "Это строка фоырпарвыапрфвра"
val charValue: Char = '1'
// логические
val trueValue: Boolean = true
val falseValue: Boolean = false
Для тех, кто собрался стать Android-разработчиком

Пошаговая
схема
Описание процесса обучения от основ Kotlin до Android-разработчика

Бесплатные
уроки
Авторский бесплатный курс по основам языка программирования Kotlin

Обучающий
бот
Тренажер и самоучитель по Котлин – бесплатные тесты и практика