* Создание объектов * Стоит ли использовать вторичные конструкторы или лучше фабричные методы в компаньоне * Что лучше - публичный конструктор или приватный с фабричным методом в компаньоне * Проверка параметров в публичном конструкторе или в фабричном методе с передачей в приватный конструктор * init блок или специальный метод init() в классах и object * Enum VS sealed * Выбор обработчика по объекту событию/полю объекта * Обновление кэша * Когда использовать `T.() -> R`, а когда `(T) -> R`, а если два параметра, то `T.(T2) -> R`, `T2.(T) -> R`, или `(T, T2) -> R` * `a.b!! -> a.b ?: error("b should be not a null")`