Знакомство с 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 надоело писать слишком много кода)
- Динамично развивается, разработчики оставляют право за собой изменять детали работы языка
Изучение языка Kotlin #
- Официальный сайт языка
- Портал с документацией
- Руководство по языку Kotlin, русскоязычный перевод документации
- Упражнения для закрепления основ языка Kotlin Koans
- Дополнение EduTools для IDEA с задачами для изучения Kotlin
- Книга Kotlin. Программирование для проффесионалов
Ментальная модель при изучении языка #
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-кода
- Разбираться с поддержкой других платформ в рамках курса не надо
Как запускать приложения #
- https://play.kotlinlang.org - ресурс для запуска простых приложений на Kotlin
- JetBrains IDEA
- Среда разработки Eclipse с плагином
- Редактор Visual Studio Code с плагином Kotlin.
- Любой текстовый редактор + система сборки
Минимальное приложение #
За исключением конфигурации системы сборки минимальное приложение состоит только лишь из функции:
fun main() {
println("Я работаю!")
}
- Синтаксис языка Си-подобный, т.е. уже знакомый и привычный
- Для описания функций и методов используется ключевое слово
fun
- Аргументы описываются в скобках после имени функции
- Для вызова функции используется знакомый синтаксис: название функции, за которым в круглых скобках указывается набор аргументов
Базовый синтаксис #
Рассмотрим основы синтаксиса языка Kotlin
- В целом всё знакомо
- Ключевые компоненты синтаксиса взяты из Си
- Описание типов переменных взято из Оберона (Паскаля, Модулы)
- Есть возможность писать функции в пакете, без привязки к объектам
- Фукнции поддерживают значения аргументов по умолчанию
Разработка простого приложения #
Реализуем небольшое приложение, которое позволит:
- Считать последовательность чисел со стандартного потока ввода
- Найти минимальный элемент
- Найти максимальный элемент
- Подсчитать среднее значение последовательности
Функции в Kotlin #
Рассмотрим основы работы с функциями в Kotlin
- Функции являются объектами первого рода, т.е. ссылки на них могут быть помещены в переменные
- Подход к реализации функционального программирования повторяет решение из Java: функция является объектом класса, реализующего нужную функцию
- Удобно создавать лямбда-функции
- Удобно связывать лямбда-функции с вызывающими их методами
Пакеты и импорты #
Рассмотрим пакеты и импорты в Kotlin
Null-безопасность #
Рассмотрим вопрос null-безопасности в Kotlin
- Отсутствие данных, null-ссылка, является краевым состоянием ссылки
- Данное состояние необходимо специально обрабатывать в любых языках
- Kotlin предоставляет удобные средства для обработки данной ситуации