-
Что такое переменные и их типы, val и var
В этом уроке мы разберемся, что такое в принципе переменные в Kotlin (будет понимание как это работает на уровне всех языков). Научимся их правильно создавать, инициализировать и изменять, учитывая нюансы с изменяемыми и неизменяемыми переменными (val и var). Также я расскажу про все типы базовых переменных и покажу на примере чем они отличаются, и как с ними работать эффективно.
-
Арифметические операции, остаток от деления
Разбираем базовую арифметику в программировании – с нуля! Рассмотрим основные операции, такие как: сложение, вычитание, деление, умножение. Еще будет немного важных нюансов про объявление и инициализацию (например, про отсутствие типизации или про присвоение переменной сразу готового выражения). Помните же про дробные типы флоат и дабл? Расскажу какой будет конечный тип, если в выражении встретятся и дробные, и целочисленные значения. Также не пропустим важную операцию по нахождению остатка от деления (или деление по модулю) – крутой способ определения четных чисел. В конечной части видео поднимем вопрос как распечатать в консоль имя класса, а также будут показаны различные способы увеличения числа на единицу (инкремент и декремент). И, наконец, выведем в консоль операторы сравнения – более плотнее с ними будем работать позже, например, при изучении логических ветвлений.
-
Интерполяция (шаблонные строки). Конкатенация
Это выглядит не так страшно, как может показаться на первый взгляд. В этом уроке работаем со строками в Kotlin (тип String и символьный тип Char). Разберем простые операции по склейке строк с помощью знака плюс (конкатенация строк). Выясним, что применяя интерполяцию (string templates) не стоит терять сознание, а скорее даже наоборот – строковые шаблоны, которые еще называют динамические строки, это весьма приятно и невероятно удобно. И, наконец, немного затронем многострочные записи и какими методами эти записи можно сделать красивыми и изящными.
-
Операторы сравнения (отношения), логические операторы
Подробно про булево значение (тип Boolean) и какие операции с помощью него можно производить в языке программирования Kotlin. Еще раз перечислим операторы сравнения: "больше", "меньше", "больше или равно", "меньше или равно", "равно", "не равно". Определим как из них создавать булевский тип данных и другие операции сравнения, в том числе аспекты инициализации логических переменных. Также в этом видео я на всякий случай продемонстрирую разницу между операциями сравнения и операциями присваивания. Мы будем писать условную микро программу по распознаванию возраста пользователя. Легенда такая: если возраст отвечает критерием, ему будет открываться секретная страница в его приложении.
Во второй части видео разбираем логические операторы "и", "или", "не". Как они помогают создавать составные логические выражения. Это обязательная основа, которая в будущем нам понадобится для работы с операторами ветвления. В конце приоткрою ширму синтаксического сахара в Котлине, а именно продемонстрирую как красиво можно создать логическое выражение, если нам необходимо, чтобы искомое число было в заданном промежутке.
-
Условные операторы if else when. Операции ветвления
Настало время для разбора условных операций и операторов ветвления в языке программирования Котлин. Продолжаем работать над нашим незамысловатым куском программы. Он определяет, нужно ли показывать или не показывать пользователю скрытый контент его приложения в зависимости от введенного возраста. Условные операторы используются в любой программе. Выстраиваются целые ветвления, в том числе и со вложенными условиями. Пройдемся по основным возможностям таких операторов в Kotlin: изучим базовые конструкции if else (и else if), а также я покажу как они могут возвращать свои значения. По пути научимся считывать данные с клавиатуры и конвертировать строку в целое число. Наконец, рассмотрим котлиновский оператор перечисления when (аналог switch в Java), что он умеет делать и как коротко и лаконично можно оформлять эти конструкции, опуская фигурные скобки.
-
Циклы while, do-while. Обратный отсчет с Thread.sleep()
Открываем тему циклов в Котлин. Начнем с простого, но эффективного. Будем писать еще один микро кусок нашей гипотетической программы, которая перед показом какого-то экрана показывает баннер с рекламой, под которой отображается счетчик с обратным отсчетом в секундах. Этот механизм обратного отсчета мы и реализуем с помощью циклов while и do-while совместно с шаблонной строкой. А паузы будем делать с помощью остановки программы (потока) методом Thread.sleep().
-
Цикл for, диапазоны (интервалы). break, continue, return
В этом уроке препарируем цикл for в Котлин. Но для работы с ним сначала необходимо изучить диапазоны (или интервалы). Разберем как создаются диапазоны и каких типов бывают. И как диапазон может быть одновременно прогрессией. После я покажу ключевые слова для проверки принадлежности к интервалу – in и !in. Во второй части перейдем непосредственно к циклу for в Kotlin: что такое и как работает. И продолжая пример из урока про while доработаем обратный отсчет. Попутно расскажу про экранирование символов. Наконец, основные операторы управления: break, continue, return. Продемонстрирую на примерах как они работают и в каких ситуациях могут быть полезны.
-
Массивы. Типы, размер, индекс массива. Перебор через for
Изучаем что такое массивы в языке программирования Kotlin и как с ними взаимодействовать. Делать это будем на небольшом списке ингредиентов из гипотетического приложения с рецептами. Как создавать массивы и заполнять их данными, а также немного про свойства и методы, которые есть у класса Array, такие как size или indexOf(). Покажу в чем разница инициализации массивов через arrayOf() и intArrayOf(). Будет затронут важный нюанс в создании массивов с помощью ключевых слов val и var. Для чтения массивов также есть несколько основных инструментов – можно обращаться по индексу или использовать функции set() и get(). Последний способ теряет актуальность и среда разработки сама подсказывает исправление кода. Также, как мы читаем элементы по индексу, можно и перезаписывать ячейки с данными. Для итерации по массиву будем использовать цикл for, который изучали на прошлом уроке. В итоге получится красиво оформленный вывод списка ингредиентов для салата.
-
Коллекции: списки (List). Функции для работы с коллекциями
В этом уроке обсуждаем коллекции в Kotlin. Точнее тезисно пройдемся по определениям Set и Map, а на списках (List) остановимся и разберем подробно. Как создавать и чем отличаются изменяемые и неизменяемые списки. Какие основные функции необходимо знать для комфортной работы с коллекциями. Также затронем тему отличия массивов от списков и в каких случаях лучше применять цикл for, а в каких функцию forEach().
-
Функции (методы), тип возвращаемого значения, return
И мы подошли к базовому разбору функций (методов) в языке программирования Kotlin. В этом уроке коротко расскажу о предназначении функций, о том какой синтаксис использовать при их создании. Мы будем считывать с консоли данные пользователя: имя и возраст. За каждое считывание будет отвечать отдельный метод. Который не только будет вызывать команду readLine(), но и возвращать полученное значение в место вызова этой функции. Наконец, сделаем еще один метод, принимающий два параметра для распечатки данных пользователя. Вишенкой на торте будет оптимизация кода для экономии многих строк без потери качества удобочитаемости текста.
-
ООП. Классы и свойства. Создание объектов (экземпляров класса)
Открываем тему объектно-ориентированного программирования (ООП). В этом уроке будет немного больше теории, чем обычно. Задача на примерах и ассоциациях понять логику классов, зачем они нужны и что с их помощью можно реализовывать. В качестве введения в понятие "класс" расскажу примеры классов в самом языке, с которыми мы уже неоднократно работали. Далее плавно перейдем к понятию "сущность". Как ее выявить и почему в мире разработки программного обеспечения принят использовать такой подход. Все это будем рассматривать на примере очередного гипотетического приложения. Это будет каталог с рецептами, блюда можно будет добавлять в избранное, просматривать этапы готовки и скачивать ингредиенты в качестве списка покупок. Реализацию будем держать в уме – такой подробный пример нужен, чтобы научиться мыслить в стиле ООП, выделять будущие классы и наделять их свойствами. Во второй части приступим к "оживлению" классов. Мы продумаем какими действиями должны обладать объекты в приложении. Эти действия превратим в функции и наполним демонстрационной логикой. В конце воспроизведем несколько пользовательских сценариев, используя описанные выше функции.
-
Конструкторы (primary, secondary). Блоки инициализации init
В этом уроке прольем свет на устройство конструкторов в Kotlin. Конструктор вызывается каждый раз при создании экземпляра класса. Рассмотрим как создавать объекты и инициализировать их с пустым конструктором. В чем были сложности и какие прелести создания объектов появились благодаря Котлин.
Конструкторов может быть несколько. Один основной (primary constructor) и множество дополнительных или вторичных конструкторов (secondary constructor). Станет понятен процесс инициализации переменных класса, а также порядок вызовов блоков кода при создании объекта. Также расскажу про блоки инициализации – init. В них можно поместить код, который должен будет непрекословно выполниться при создании экземпляров класса. Блоков init может быть множество, выполняться они будут в порядке расположения в коде.
-
Null Safety – операторы ?. !!, NullPointerException (NPE)
Знакомимся с крутой фичей языка программирования Kotlin – null safety. Сначала расскажу в целом что такое исключения в программировании и про NullPointerException (NPE) в частности. Также коротко приведу пример, когда может возникнуть эта ошибка при взаимодействии с сервером. Далее изучим основные операторы в теме null-безопасности: оператор безопасного вызова (?.) и оператор утверждения "Это не null" (!!).
-
ООП. Наследование. open class. Переопределение (override)
На примере Kotlin разбираем один из принципов объектно-ориентированного программирования (ООП). В уроке коротко опишу что это такое и в каких ситуациях применяется. На примере логики определения сущностей космических кораблей создадим базовый класс-родитель с общими свойствами и функциями. Затем создадим два подкласса. На примере продемонстрирую как установить связь между родителем и потомком. Итогом будет создание объектов подклассов и вызов у этих объектов базовых методов суперкласса. Далее будет продемонстрирована логика расширения и переопределения методов в подклассе для специализированной для него реализации. В заключение будет пару слов про ключевое слово super, с помощью которого можно обращаться к свойствам и методам суперкласса.
-
Интерфейсы, абстрактные классы. Имплементация.
Немного затронем абстрактные классы в Kotlin. Объявим абстрактный класс с такими же полями и методами внутри него. Далее создадим дочерний класс космического шаттла Первого ордена и имплементируем в него поля и методы родителя. Не смотря на общую схожесть интерфейсов и абстрактных классов, расскажу про их функциональные отличия. Научимся создавать интерфейсы и станет понятно по какому принципу лучше их объединять. Далее покажу как применять те или иные интерфейсы к классам. Делать это будем с базовым классом, так как весь функционал автоматически передастся дочерним классам. Наконец, создадим экземпляр конкретизированного класса с типом космического шаттла и проверим корректность отработки реализованных методов интерфейсов.
-
ООП. Инкапсуляция. Модификаторы доступа
Рассказываю про модификаторы доступа (видимости) в Kotlin. public, private, protected, internal. Краткое описание каждого из них и примеры. В качестве примера будем описывать объект "Путеводитель для путешествующих автостопом по Галактике". Наглядно будет понятно, какой областью видимости обладает каждый из модификаторов. Из какого класса или файла к нему можно обратиться или он будет виден. Далее поговорим об еще одном принципе ООП – инкапсуляции. И в завершении покажу как обращаться к приватным переменным в классе извне безопасно. Это подведет нас к теме сеттеров и геттеров.
-
Сеттеры и Геттеры, field, как их кастомизировать
Сеттеры и геттеры в языке программирования Kotlin (setter and getter). Из урока вы поймете, что это такое и как работает. При обращении к полям Котлин под капотом генерирует их самостоятельно. Но их можно кастомизировать под свои нужды и я покажу как.
-
ENUM (классы перечислений), TODO() и тип Nothing
enum классы в языке программирования Kotlin. enum – сокращение от enumeration, поэтому по другому они еще называются классы перечисления. enum полезен там, где сущность может принимать одно из заранее известных вариантов значений. В качестве примера будем рассматривать хранение в классе перечисления констант статусов готовности блюда. В гипотетическом приложении для доставки еды. Будем парсить коды ошибок с функции-имитации сервера и запускать соответствующие статусы и действия, которые к ним имеют отношение. В уроке покажу как можно автоматически заполнять нужными значениями when. И в завершении разберем что такое TODO и зачем это нужно, а также как тудушки роняют программу, если оставлять их без присмотра.
-
Лямбда-функции (лямбды), анонимные функции
В языке программирования Kotlin есть анонимные функции, а есть лямбды, которые тоже иногда называют анонимными функциями. Сейчас объясню почему. В уроке сначала разбираем устройство анонимных функций – как создаются, какой у них тип, где применяются. А еще мы столкнемся с неочевидным поведением кода. Обладая полученной информацией, станут понятны отличия обычных анонимных функций в Котлин от лямбда-выражений. Разберем создание лямбд по атомам. Это важнейший кирпичик в фундамент профессиональной разработки.