|
Общее позиционирование
|
Классический строго типизированный язык для JVM (и Android). Основа корпоративной разработки, стабильный, зрелый, но многословный.
|
Современный статически типизированный язык от JetBrains, полностью совместимый с Java. Более лаконичный, безопасный и “умный”.
|
|
Парадигма
|
Объектно-ориентированный + функциональный (через Stream API).
|
Полностью мультипарадигменный: ООП, функциональный, декларативный.
|
|
Пример “Hello World”
|
public class App { public static void main(String[] args){ System.out.println("Hello, World"); } }
|
fun main() { println("Hello, World") }
|
|
Компиляция / выполнение
|
Компилируется в байткод JVM или GraalVM native.
|
Компилируется в тот же байткод JVM (или в JS/Native). Полностью бинарно совместим с Java.
|
|
Типизация
|
Статическая, строгая, но с nullable типами (null может вызвать NPE).
|
Статическая, строгая, но с безопасностью null (String? / String). Компилятор предотвращает NPE.
|
|
Среда выполнения
|
JVM, Android Runtime.
|
JVM, Android, JS (через Kotlin/JS), Native (через Kotlin/Native).
|
|
Совместимость
|
Java-код → Kotlin без проблем. Kotlin-код → доступен Java (через аннотации @JvmName, @JvmStatic).
|
Полностью совместим с Java. Может использовать Java библиотеки, классы и фреймворки.
|
|
Объявление переменных
|
int x = 10; final int y = 5;
|
var x = 10 // изменяемаяval y = 5 // неизменяемая
|
|
Типы данных
|
Примитивы (int, double, boolean, char) и ссылочные типы.
|
Только объектные типы, но компилятор оптимизирует до примитивов. Null-безопасность встроена.
|
|
ООП-модель
|
Классы, интерфейсы, наследование, абстрактные классы.
|
То же, но с лаконичным синтаксисом. data class, sealed class, object (синглтон).
|
|
Инкапсуляция
|
public, private, protected, default.
|
public, private, protected, internal (видно в модуле).
|
|
Наследование
|
Классы по умолчанию final. Для наследования — extends.
|
Все классы final по умолчанию, для наследования — open.
|
|
Пример класса
|
class User { private String name; }
|
class User(var name: String)
|
|
Конструкторы
|
public User(String name){ this.name = name; }
|
class User(val name: String) — первичный конструктор в объявлении.
|
|
Свойства и геттеры
|
Явные get()/set() методы.
|
Автоматические свойства (var name → имеет get/set по умолчанию).
|
|
Null-безопасность
|
Есть NullPointerException.
|
Типы ?: val name: String? = null. Компилятор требует проверку перед использованием.
|
|
Elvis-оператор
|
Нет.
|
Есть: val len = name?.length ?: 0 — аналог if (name != null) name.length else 0.
|
|
Smart Casts
|
Нет (нужно явно кастовать).
|
Есть: после проверки if (obj is String) → внутри блока obj уже String.
|
|
Функции
|
int add(int a, int b){ return a + b; }
|
fun add(a: Int, b: Int) = a + b (автоматический вывод типа и сокращённая форма).
|
|
Функции как значения
|
Через интерфейсы (Runnable, Function).
|
Полноценные функции высшего порядка и лямбды (list.map { it * 2 }).
|
|
Extension-функции
|
Только через наследование или утилиты.
|
Да: можно добавить метод к любому классу без наследования (fun String.lastChar() = this[this.length - 1]).
|
|
Data-классы
|
Нужно писать вручную equals, hashCode, toString.
|
data class User(val name: String) — всё создаётся автоматически.
|
|
Sealed-классы
|
Через enum или наследование.
|
Есть sealed class — ограниченные иерархии для безопасных switch-like конструкций.
|
|
Enums
|
Да (enum Color { RED, GREEN, BLUE }).
|
Да, с расширением (enum class Color(val rgb: Int)), можно добавлять свойства и методы.
|
|
Лямбды
|
С Java 8 (x -> x + 1).
|
Встроены изначально ({ x -> x + 1 }), плюс trailing lambda синтаксис.
|
|
Stream API / коллекции
|
Stream API (list.stream().map(...)).
|
Коллекции Kotlin — расширения map, filter, fold, ленивые последовательности (sequence {}).
|
|
Пример
|
list.stream().filter(x -> x>0).collect(...)
|
list.filter { it > 0 }.map { it * 2 }
|
|
Обработка ошибок
|
Исключения (try/catch/finally), checked и unchecked.
|
Исключения есть, но checked исключений нет (всё unchecked).
|
|
Асинхронность
|
Thread, ExecutorService, CompletableFuture.
|
Coroutines (suspend fun, launch, async): лёгкие кооперативные потоки с безопасной отменой.
|
|
Пример coroutine
|
—
|
GlobalScope.launch { val data = async { getData() }; println(data.await()) }
|
|
Фреймворки (backend)
|
Spring Boot, Quarkus, Micronaut.
|
Ktor (JetBrains), Spring Boot (через Kotlin DSL), Micronaut, Javalin, Exposed ORM.
|
|
Фреймворки (frontend / mobile)
|
JavaFX, Android SDK.
|
Jetpack Compose (Android), Kotlin Multiplatform Mobile (KMM), Compose for Desktop, Kotlin/JS.
|
|
ORM и БД
|
Hibernate, JPA.
|
Exposed, Ktorm, Spring Data Kotlin, JPA через Kotlin.
|
|
Тестирование
|
JUnit 5, Mockito, TestNG.
|
JUnit 5 + Kotest, MockK (аналог Mockito, но Kotlin-style).
|
|
Документация
|
Javadoc (/** ... */).
|
KDoc (/** ... */, Markdown, интеграция с IntelliJ).
|
|
Логирование
|
SLF4J, Logback, Log4j.
|
Те же библиотеки (совместимо).
|
|
Функциональные элементы
|
Stream API, lambda, Optional.
|
Полноценная FP: map, flatMap, fold, run, let, apply, also, takeIf, takeUnless.
|
|
Инструменты сборки
|
Maven, Gradle.
|
Gradle Kotlin DSL (нативная поддержка Kotlin).
|
|
Ассерты / тесты
|
assertEquals(a,b) (JUnit).
|
a shouldBe b (Kotest), DSL-тесты.
|
|
Паттерн matching / switch
|
switch-case.
|
when (универсальный и мощный аналог, возвращает значение).
|
Пример when
|
—
|
val msg = when(x){ 1 -> "One" 2 -> "Two" else -> "Other" }
|
|
Сборка / CI
|
Jenkins, Maven, GitLab CI.
|
Jenkins, Gradle, GitHub Actions, Kotlin DSL CI pipelines.
|
|
Документирование API
|
Swagger/OpenAPI.
|
Swagger через Ktor, Springdoc, или KDoc автогенерация.
|
|
Фронтенд / UI
|
JavaFX, JSP.
|
Jetpack Compose, Compose Multiplatform, Kotlin/JS + React.
|
|
Android-разработка
|
Основной язык до 2019.
|
Официальный язык Android с 2019 года (Google). Полная поддержка Jetpack, Kotlin DSL, coroutines.
|
|
Сборка Android
|
XML + Activity.
|
Jetpack Compose (UI = код), меньше шаблонов и XML.
|
|
Интероперабельность с Java
|
100% двухсторонняя.
|
100% двухсторонняя, но Kotlin имеет больше синтаксического сахара.
|
|
Типичные области применения
|
Корпоративный backend, Android, микросервисы.
|
Android, backend (Spring, Ktor), multiplatform, DSL, data pipelines.
|
|
Производительность
|
Сопоставима с Kotlin (JVM одинаков).
|
Равная Java (тот же байткод JVM). Kotlin/Native — чуть медленнее нативных языков.
|
|
Преимущества
|
Надёжность, зрелость, предсказуемость.
|
Короткий, выразительный синтаксис, null-безопасность, корутины, современный дизайн.
|
|
Недостатки
|
Многословие, verbosity, checked exceptions.
|
Медленнее компиляция, сложнее дебаг, не вся Java API “коротко” оборачивается.
|
|
Философия языка
|
“Write once, run anywhere.”
|
“Make code safe, concise, and expressive.”
|
|
Крупные проекты
|
LinkedIn, Netflix, Amazon, Android SDK.
|
Jetpack, Android Studio, Gradle Kotlin DSL, Ktor, Pinterest, Coursera.
|