KMP Урок 4: Классы, объекты, data class, sealed class
Если ты прошёл первые три урока, у тебя уже есть базовые типы, if / when, null safety, функции, лямбды и extensions. Код ты и читаешь, и пишешь. А вот описывать данные и состояния так, как принято в Kotlin - пока ещё нет.
Четвёртый урок закрывает как раз это. Считай, фундамент, на котором стоит модель данных любого приложения:
• Классы и конструкторы. Свойства объявляются прямо в заголовке - class User(val name: String, var age: Int), без дублирования "параметр - присваивание - поле", к которому мы привыкли в Swift init. Логика инициализации уходит в init блок. И сюрприз для свифтовика: класс в Kotlin final по умолчанию, чтобы наследоваться - помечай open. А в Swift ровно наоборот, да-да не удивляйтесь.
• Свойства, lateinit и by lazy. Кастомные get / set, backing field через field, private set - прямой аналог private(set) var. lateinit для DI и setup, by lazy для ленивых вычислений с кешированием. А ещё разобрал, почему аналог willSet / didSet в Kotlin - это делегат Delegates.observable и кастомный сеттер тут ни при чём.
• data class. Рабочая лошадка: equals, hashCode, toString, copy() и componentN() компилятор пишет за тебя. Но есть очень интересный момент - data class в Kotlin это reference type, а не value, как Swift struct.
• sealed class и sealed interface. Тот самый аналог Swift enum с associated values. Компилятор знает полный список наследников, поэтому when получается exhaustive без else: добавил новый вариант - и все when в коде сразу подсветятся ошибкой. Плюс data object для состояний без данных. И отдельно - как эта иерархия выглядит на стороне Swift через SKIE.
• object и companion object. Синглтон в одну строку - object Logger {} вместо static let shared + private init() + shared. companion object - это "статика" класса. Разобрал, когда брать object, когда companion, а когда object expression.
Каждая тема - со сравнением Swift vs Kotlin. Чтобы было наглядно видно и понятно: вот так мы пишем в Swift и вот так мы пишем в Kotlin. В конце, как обычно, домашка по нарастающей:
• easy - карточка пользователя
• easy+ - результат сетевого запроса
• medium - целая система авторизации
По времени где-то на 120-150 минут. Ну и самособой вопросы? Предложения? В лс или комментах всегда жду!
kmp