Знакомство с Kotlin

Знакомство с 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 #


Ментальная модель при изучении языка #

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: функция является объектом класса, реализующего нужную функцию
  • Удобно создавать лямбда-функции
  • Удобно связывать лямбда-функции с вызывающими их методами

Пакеты и импорты #

Рассмотрим пакеты и импорты в Kotlin


Null-безопасность #

Рассмотрим вопрос null-безопасности в Kotlin

  • Отсутствие данных, null-ссылка, является краевым состоянием ссылки
  • Данное состояние необходимо специально обрабатывать в любых языках
  • Kotlin предоставляет удобные средства для обработки данной ситуации

© A. M. Васильев, 2023, CC BY-SA 4.0, andrey@crafted.su