Урок 1: Переменные. Базовые типы данных. var, val и const val в Kotlin

1 1 scaled - Android [Kotlin] для начинающих

Смотрите видеоурок бесплатно на удобной для вас платформе:

Здравствуйте! Начнём знакомство с одним из базовых элементов любой программы — переменными. А также рассмотрим, какие типы данных они могут хранить в Kotlin и как они применяются в реальных приложениях.

Что такое переменные и зачем они нужны?

Переменные можно представить как контейнеры для данных, которые мы видим на экранах смартфонов и компьютеров. Данные бывают разными: числа, текст, логические значения и многое другое. Эта информация не появляется из ниоткуда. Чтобы программа могла работать с этими данными, они передаются в переменные — специальные коробочки, которые хранят нужную информацию в памяти. Это значит, что в программе мы постоянно будем работать с данными, используя такие контейнеры.

Как создать переменную в Kotlin?

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

val numberOfOrders = 42

Для объявления переменной в Kotlin используются ключевые слова val или var (о втором ключевом слове будет ниже). Далее пишется осмысленное название переменной, чтобы было понятно, что она хранит или для чего используется. Обратите внимание на стиль написания имени — с маленькой буквы и каждое следующее слово с большой буквы. Этот способ называется camelCase и его принято использовать при именовании переменных и методов (функций).

Знак равенства (“=”) – это оператор присваивания. В коде всегда данные справа от Равно присваиваются данным слева от Равно. Итак, мы объявили переменную numberOfOrders и присвоили ей значение 42 (также можно сказать создали или задекларировали переменную и инициализировали ее).


Великолепно! Теперь давайте объявим ещё одну переменную и присвоим ей строку — например, приветственное сообщение для пользователя нашего приложения.

val welcomeMessage = "Welcome to our app!"

Обратите внимание, вносимый в переменную текст заключен в двойные кавычки.

Работа с переменными

Итак, теперь распечатаем значение наших переменных в консоли. Для этого воспользуемся фукнцией println в которую отправим наши переменные в качестве параметра (в каждый метод по одной строке – то есть по одному параметру) и запустим программу. Таким образом то, что хранилось в них условно провалится в функцию распечатки данных в консоль и мы увидим их содержимое.

*println*(numberOfOrders) *println*(notificationText)

Изменение значений переменных

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

numberOfOrders = 52

Обратите внимание, мы не меняем проинициализированное значение сверху. Мы переписываем данные переменной новой информацией, заменяем все в ней имеющееся новым числом. И вызываем println для вывода в консоле значения этой переменной. Как вы понимаете, должно будет отобразиться число 52 .

Зафиксируем. Программа при выполнении двигается сверху вниз построчно и можно проследить ее действия.

  • Объявили переменную с количеством заказов
  • Присвоили значение на той же строке
  • Распечатали ее в консоль
  • Далее присвоили ей новое значение
  • Снова распечатали уже новое число.

Выводить в консоль два разных значения нам не нужно, поэтому закомментируем старый вызов функции. Для быстрого однострочного комментария есть сочетание клавиш Ctrl + / на Windows и ⌘ + / на MacOS. Есть еще сочетание для многострочных комментариев – для этого к комбинации добавьте Shift. Если что, раскладку всегда можно посмотреть в настройках.


Запускаем. И обнаружим ошибку.

  • Во-первых при попытке запустить проект в консоли мы видим текст ошибки – “переменная val не может быть переназначена”
  • Во-вторых среда разработки уже ее подсвечивает и предлагает варианты исправления val на изменяемую переменную var.

Сразу дам рекомендацию на будущее, которая сэкономит вам кучу времени при изучении программирования. Всегда обращайте внимание подсветку ошибок, старайтесь читать и разбираться что они означают. Если ошибка для вас новая, а спросить не у кого – обращайтесь в гугл, 99%, что до вас ее уже где-то спрашивали.

Однако, с осторожностью работайте с ии-помощниками – это технология что-то вроде продвинутого гугла, но нередко очень убедительно допускает ошибки. В интернете тоже допускают ошибки, но благодаря сообществу и рейтингам на платформах типа Stack Overflow – есть шанс докопаться действительно до подтвержденной истины.

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

Отлично. Воспользуемся предложением среды разработки к исправлению. Запускаем и программа отрабатывает корректно. Почему это произошло?

Переменная, объявленная с помощью ключевого слова val является неизменяемой, константа своего рода (но не путать с const val). Это значит, что если мы объявили переменную и проинициализировали ее каким-либо значением и после этого попытаемся перезаписать данные в ней (поместить новую информацию), как в данном случае, возникнет ошибка компиляции и программа не запустится.

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

Ключевое слово var говорит нам о том, что эту переменную можно изменять и перезаписывать. В реальной жизни это можно рассматривать как “защита от дурака”, чтобы отличать переменные, которые собирались модифицировать от тех, которые не собирались, когда их настолько много, что в их назначении можно запутаться.

Разница между var, val и const val

А теперь коротко и тезисно еще раз.

  • var — переменная, значение которой можно изменять после объявления.
  • val — переменная, значение которой нельзя изменить после инициализации; это аналог неизменяемой переменной или константы.
  • const val — новый озвученный выше вид объявления констант. Он используется для объявления констант на уровне компиляции. То есть для переменных, которые не изменяются во время выполнения программы и доступны из разных частей кода. В них можно хранить, например, какой-нибудь URL внутри приложения или его версию. Мы будем использовать их немного позже.

Типы данных в Kotlin

Хорошо. Поговорим о типах переменных. Когда мы объявляли наши переменные и присваивали им значения, тип автоматически определялся и присваивался переменной согласно передаваемым данным. Но в Котлин можно явно указать тип переменной через двоеточние при ее объявлении или вызвав контекстное меню.

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

Базовые типы данных в Kotlin

Теперь более детально рассмотрим типы данных в Котлин. Базовые типы данных подразделяются на несколько групп: целочисленные, вещественные, строковые и логические.

1. Целочисленные типы

Давайте по порядку. В коде выше мы использовали самый распространенный целочисленный тип данных Int. В группе целочисленных типов есть еще несколько типов, которые различаются только максимально возможным количеством хранимой информации, другими словами тип определяет какое максимальное число может хранить переменная.

Int (сокращенное от Integer — целое число) может хранить в себе 32 bit информации. Это числа диапазона, который вы видите на экране -2 147 483 648 до 2 147 483 647. Второе число с окончанием 47 потому что в положительный диапазон входит еще 0.

Подробно все числовые типы расписывать не буду, моя задача передать принцип. Тезисно пройдемся по остальным. Названия говорят сами за себя.

  • Long — может хранить до 64 бит информации. Для действительно больших чисел, которые я даже не знаю как произносятся. При инициализации значений типа Long – к самому значению в конце добавляется буква L.
  • Short — может хранить до 16 bit информации.
  • Byte — создаст самую маленькую числовую ячейку в памяти размером 8 бит (или 1 байт).

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

Кроме того, есть версии целочисленных типов для хранения только положительных значений, называемые «Unsigned». Они обозначаются добавлением U к типу, например, UInt или ULong. Это полезно, когда мы точно знаем, что значение не будет отрицательным.


2. Вещественные типы (числа с плавающей точкой)

Если нам нужно работать с числами, которые имеют дробную часть, мы используем вещественные типы – их два.

  • Double – вмещает 64 бита.
  • Float – вмещает 32 бита.

По сути отличаются только вмещаемым размером, но еще важно учитывать один нюанс. По умолчанию если вы присвоите число с плавающей точкой без явного указания типа, оно будет Double. Чтобы явно указать тип Float, следует добавить символ f к значению в конце, например, 3.14f.


3. Символьные и строковые типы

Теперь о текстовых данных:

  • String — это строка символов, заключённая в двойные кавычки, например: «Привет, мир!». С строками мы уже работали ранее.
  • Char — используется для хранения только одного символа (любого) и заключается в одинарные кавычки.

4. Последний обособленный тип – Логический

Обозначается как Boolean и может принимать только два значения: true или false. То есть «истина» или «ложь». Это полезно для проверки условий. Например, если нам нужно проверить, авторизован ли пользователь, а потом куда-либо передать результат проверки. Именно этот результат и поместим в переменную с типом Boolean.

Для тех, кто собрался стать Android-разработчиком

Пошаговаясхема
Пошаговая
схема

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

Бесплатныеуроки
Бесплатные
уроки

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

Обучающийбот
Обучающий
бот

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

Поделиться уроком

комментария 2

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *