Kotlin. Переменные и типы данных

Статья от <a href="https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Ft.me%2Fee_code&postId=825779" rel="nofollow noreferrer noopener" target="_blank">E-code</a>
Статья от E-code

Не волнуйтесь, если что-то не работает. Если бы всё работало, вас бы уволили.

Mosher’s Law of Software Engineering

Сегодня настало время поговорить о по-настоящему интересных вещах. И нет, речь сейчас не пойдет о том, как нейросети генерируют посты в пабликах и каналах (хотя кто знает: возможно эта статья - тоже результат шайтан-машины). Сегодня мы поговорим с Вами о Возможностях управления... управления оперативной памятью Вашего компьютера (ну а о других возможностях Вам расскажет нейросеть)!

Переменные

Закройте глаза и на секунду представьте: Вы являетесь разработчиком супер-большого консольного-приложения для своего идеального стартапа. И в один прекрасный день Вы всё-таки понимаете, что программа не может вечно работать на одних командах println() - ей нужно больше функционала, а самое главное - ей нужно где-то хранить информацию (ведь информация сегодня - самый ценный ресурс, которым мы можем обладать).

Поэтому возникает вполне очевидный вопрос: "а где мы можем хранить эту информацию в компьютере?".

Ответом на этот вопрос и является тема текущей статьи: мы можем временно сохранять любой вид информации внутри оперативной памяти компьютера с помощью переменных.

Для того чтобы создать переменную в нашем коде, достаточно написать слово var и указать имя переменной, после чего мы можем смело ставить знак "=" и присвоить ей любое значение! Звучит не сложно, правда?

//Создание трех переменных, хранящих информацию о будущем миллионере Петьке fun main(args: Array<String>) { var name = "Петька" var age = 18 var money = 19500.50 }

Теперь давайте разберемся по порядку:

Когда мы с Вами пишем слово var, Kotlin фактически говорит: "Друг, мне нужно немного оперативной памяти, чтобы сохранить в переменную какое-то значение". Это ключевое слово позволяет создать в первый раз переменную и в дальнейшем на протяжении всей программы работать с ней: брать из неё значение, изменять его и преобразовывать.

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

  • Может содержать латинские буквы, цифры и нижнее подчеркивание
  • Должно начинаться с латинской буквы или нижнего подчеркивания
  • Не должно быть зарезервированным словом (например, var или fun)

Далее мы поставили знак "=", чтобы присвоить значение переменной (например, строку "Петька" или число 18).

Таким образом,

Переменная - это определенный участок памяти, который хранит некоторое значение

Всё просто? Тогда движемся дальше!

Как использовать переменные?

Окей, мы создали три переменные для героя нашей статьи Петьки (нужно непременно предложить ему платные услуги по пиару). Но как работать теперь с этими переменными, и что нам это даёт?

Использовать переменные очень просто: мы можем в любой момент времени в любом месте программы мы можем получить и изменить их значения!

Например:

fun main(args: Array<String>) { //Создаем три переменные var name = "Петька" var age = 18 var money = 19500.50 //Выводим значение переменной с именем в консоль println(name) //Соединяем значение переменной с текстом и выводим в консоль println("У меня на счету: " + money + "руб.") //Изменяем значение баланса и выводим в консоль money = 100500.5 println("А теперь на счету: " + money) }

Несколько строк кода - и у Петьки уже шестизначные суммы на счету!

Этот код выдаст следующий результат в консоли:

<i>Самый быстрый кэш в Петиной жизни</i>
Самый быстрый кэш в Петиной жизни

Наверняка Вы уже успели испугаться русским буквам в консоли, идущим после двух слэшов "//". Такие записи называются комментариями и они нужны для увеличения читаемости кода. Когда код программы станет слишком большим, комментарии помогут Вам в нём ориентироваться. К тому же, вернувшись к проекту через долгое время, Вы наверняка забудете, как работает Ваш код ("ЧЕ У ВАС ЗДЕСЬ ПРОИСХОДИТ?!"), но комментарии помогут избавиться от этой легкой амнезии :)

Комментарии - текст, поясняющий ваш код. Для создания комментария можно использовать два слэша: "//комментарий" или "/*Многострочный комментарий*/"

Теперь проанализируем сам код:

//Выводим значение переменной с именем в консоль println(name)

Так, в этой строчке кода мы выводим значение переменной с именем в консоль с помощью команды println(), доставая значение "Петька" из оперативной памяти, на ячейки который ссылается наша переменная name.

//Соединяем значение переменной с текстом и выводим в консоль println("У меня на счету: " + money + "руб.")

Далее мы выводим баланс пользователя вместе с другим текстом, заключенным в двойные кавычки. Обратите внимание, как мы соединяем значение переменной money с текстом при помощи знака "+". Это один из возможных способов вставки значения переменной внутрь текста. В следующих статьях мы рассмотрим и другие способы.

//Изменяем значение баланса и выводим в консоль money = 100500.5 println("А теперь на счету: " + money)

И, наконец, мы изменяем значение переменной money, присваивая ей значение 100500,00, после чего смело выводим новое значение в консоль (easy money!).

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

var balance = money

На этом небольшом примере мы с Вами научились использовать и изменять значение переменных.

Ключевое слово val

Создавать переменные можно не только при помощи ключевого слово var. Переменные можно объявлять также при помощи val: единственное отличие такого способа заключается в том, что

Переменные, созданные при помощи val, нельзя изменять в дальнейшем в коде

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

fun main(args: Array<String>) { val balance = 30000 println(balance) //Вывод: 30000 balance = 35000 //ОШИБКА! }

На этот раз банковская ошибка не в пользу Пети.

Типы данных

Плохая примета у девушки спрашивать её возраст, а у переменной - её тип данных. Спросите: "Почему?". А всё потому что

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

<i>Различие в объеме требуемой памяти для различных типов данных</i>
Различие в объеме требуемой памяти для различных типов данных

В Kotlin'е существует множество типов данных и сейчас мы рассмотрим их подробнее

Целочисленный тип данных

Целочисленный тип данных - это все целые числа (например: 1, 7, 123, 0, -14 и т.д.)

Существует несколько типов данных, относящихся к целочисленным (каждый из них имеет свой минимальный/максимальный диапазон и размер необходимой памяти):

  • Byte - 1 байт; диапазон [-128; 127]
  • Short - 2 байта; диапазон [-32768; 32767]
  • Int - 4 байта; диапазон [-2 147 483 648 (-2^31); 2 147 483 647 (2^31 - 1)]
  • Long - 8 байт; диапазон [-2^63; 2^63 - 1]

Также, если Вы уверены, что значение в Вашей переменной будет только положительное (негативных не будет), вы можете использовать беззнаковые целочисленные типы данных:

  • UByte - 1 байт; диапазон [0; 255]
  • UShort - 2 байта; диапазон [0; 65 535]
  • UInt - 4 байта; диапазон [0; 2^32 - 1]
  • ULong - 8 байт; диапазон [0; 2^64 - 1]

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

fun main(args: Array<String>) { val a: Byte = 1 var b: Short = -21 val c: UInt = 43U //Беззнаковая переменная val d: Long //Значение переменной с объявленным типом можно указать позже d = 45047 }

Посмотрите внимательнее на 4 строчку кода. Самые внимательные из Вас наверняка заметили, что для беззнаковых типов данных нужно добавлять суффикс U на конец, чтобы Kotlin смог идентифицировать гендер переменной c как беззнаковый.

Числа с плавающей точкой

На самом деле, плавать они не умеют. Но зато они умеют сохранять дробную часть внутри себя. Поэтому данному типу данных можно дать следующее определение:

Числа с плавающей точкой - это все дробные числа (например: 23.7, -1.5, 0.0)

Существует всего 2 типа данных для чисел с плавающей точкой:

  • Float - 4 байта; диапазон [-3.4*10^38; 3.4*10^38]
  • Double - 8 байт; диапазон [±5.0*10^-324; ±1.7*10^308]

Кроме того, такие числа можно записывать и в виде экспоненциальной записи (да-да, та самая непонятная запись числа, знакомая нам из курса физики):

fun main(args: Array<String>) { val x1: Double = 2.5 var x2: Float = 2.3F //Обратите внимание на суффикс F, характерный только для Float var x3 = 3e7 //То же самое, что и 3 * 10^7 }

Обратите внимание, что для типа Float мы обязаны дополнительно указывать букву F в конце числа, чтобы Kotlin мог правильно распознать этот тип данных (этого пловца).

Логический тип данных

У всякого безумия есть своя логика. Вот и у Kotlin'а есть свой особый тип данных, называемый логическим.

Логический (булевский) тип данных - тип данных, который может принимать только 2 значения: true (истина, правда, корректно) и false (ложь, неправда, некорректно)

fun main(args: Array<String>) { var isCorrectEmail: Boolean = true var isCorrectPassword = false }

Логический тип данных обычно используется в условных операторах, о которых мы поговорим чуть позже. Старше ли пользователь 18 лет, любит ли он капибар, изучает ли он Kotlin и Java одновременно - ответы на все эти вопросы может дать логический тип данных.

Символьный тип данных

Символьный тип данных - это один отдельный символ, заключенный в одинарные кавычки

fun main(args: Array<String>) { var c1 = 'a' var c2 = 'b' var c3 = '4' }

Строки

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

Строка - это любая последовательность символов, заключенная либо в двойные кавычки, либо в тройные двойные кавычки

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

fun main(args: Array<String>) { val text1 : String = "какой-то текст" val text2: String = """Строка 1 Строка 2""" println(text1) println(text2) }

В консоли увидим следующий вывод:

Kotlin. Переменные и типы данных

Со строками мы будем работать часто, поэтому к ним мы еще обязательно вернемся ("Хатико. Начало").

Тип Any

Для того, чтобы присвоить переменной любое значение, используется тип Any

Тип Any позволяет указать любой тип данной для переменной

fun main(args: Array<String>) { var price: Any = 1200 println(price) //1200 price = "Тысяча двести" println(price) //Тысяча двести //ЧБД - что будет дальше? }

Теперь, когда у Вас сложилось понимание о переменных и типах данных мы можем двинуться дальше - в светлое ИТ будущее! Вместе. Вместе с E-code.

Что дальше?

В следующей статье мы с Вами подробнее рассмотрим работу с пользовательским выводом (да-да, той самой командой println()), разберем, как можно преобразовывать типы из одного в другой, а также научимся вводить информацию в консоль ИЗВНЕ нашего кода!

Дорогой читатель, я надеюсь моя статья оказалась полезной для тебя!

Ты всегда можешь следить за моим творчеством на этом канале.

Спасибо за проявленный интерес!

Начать дискуссию