Знакомство с Kotlin
#
Васильев Андрей Михайлович, 2023
Версии презентации
Язык Kotlin
#
- Разработан компанией JetBrains
- Представлен в 2011 году
- Версия 1.0 выпущена в 2016 году
- С 2019 является основным языком разработки под Android
- Версия 1.6 вышла в ноябре 2021 года
- Версия 1.7 вышла в июне 2022 года
- Версия 1.8 вышла в декабре 2022 года
- Версия 1.9 вышла в июле 2023 года
Примерно каждые полгода выходит новая версия. Тематика последних выпусков: расширение списка поддерживаемых платформ и переход на унифицированный компилятор
Особенности платформы
#
- Можно разрабатывать приложения под несколько платформ:
- Мобильные приложения Android
- Настольные приложения без JVM, платформенный код
- Приложения под iOS
- Серверные веб-приложения
- Клиентские веб-приложения (платформа JavaScript)
- Клиентские веб-приложения (платформа WebAssembly)
- Можно разрабатывать библиотеки для различных платформ
- Можно использовать общую кодовую базу при разработке приложений под разные платформы
Мы будем рассматривать классический вариант — разработку приложений под JVM
Особенности языка Kotlin
#
- Язык общего назначения, т.е. можно разрабатывать любые приложения
- Поддерживает современные парадигмы программирования:
- Императивное, процедурное
- Объектно-ориентированное
- Функциональное
- Обладает современным компактным синтаксисом
- Изначально нацелен на решение практических ограничений языка Java 7/8 (разработчикам JetBrains надоело писать слишком много кода)
- Динамично развивается, разработчики оставляют право за собой изменять детали работы языка
Ментальная модель при изучении языка
#
flowchart LR
kotlin["Исходный код на Kotlin"]
java["Исходный код на Java"]
kotlin-jvm("Компилятор Kotlin\nдля JVM")
javac("Компилятор Javac")
kotlin-class[".class-файлы"]
java-class[".class-файлы"]
jvm("Виртуальная машина\nJVM")
kotlin --> kotlin-jvm --> kotlin-class --> jvm
java --> javac --> java-class --> jvm
- В качестве целевой платформы будем использовать только JVM
- Можно легко перенести идиоматические для Java решения:
- Деление кода на пакеты
- Написание классов
- Создание объектов из классов
- Использование коллекций (только стоит использовать классы Kotlin:
List
, Map
)
- Использование перечислений
- Другие инструменты хорошо дополняют известные элементы и решают проблемы многословности Java-кода
- Разбираться с поддержкой других платформ в рамках курса не надо
Как запускать приложения
#
Минимальное приложение
#
За исключением конфигурации системы сборки минимальное приложение состоит только лишь из функции:
fun main() {
println("Я работаю!")
}
- Синтаксис языка Си-подобный, т.е. уже знакомый и привычный
- Для описания функций и методов используется ключевое слово
fun
- Аргументы описываются в скобках после имени функции
- Для вызова функции используется знакомый синтаксис: название функции, за которым в круглых скобках указывается набор аргументов
Базовый синтаксис
#
Рассмотрим основы синтаксиса языка Kotlin
- В целом всё знакомо
- Ключевые компоненты синтаксиса взяты из Си
- Описание типов переменных взято из Оберона (Паскаля, Модулы)
- Есть возможность писать функции в пакете, без привязки к объектам
- Фукнции поддерживают значения аргументов по умолчанию
Разработка простого приложения
#
Реализуем небольшое приложение, которое позволит:
- Считать последовательность чисел со стандартного потока ввода
- Найти минимальный элемент
- Найти максимальный элемент
- Подсчитать среднее значение последовательности
Функции в Kotlin
#
Рассмотрим основы работы с функциями в Kotlin
- Функции являются объектами первого рода, т.е. ссылки на них могут быть помещены в переменные
- Подход к реализации функционального программирования повторяет решение из Java: функция является объектом класса, реализующего нужную функцию
- Удобно создавать лямбда-функции
- Удобно связывать лямбда-функции с вызывающими их методами
Null-безопасность
#
Рассмотрим вопрос null-безопасности в Kotlin
- Отсутствие данных, null-ссылка, является краевым состоянием ссылки
- Данное состояние необходимо специально обрабатывать в любых языках
- Kotlin предоставляет удобные средства для обработки данной ситуации