Какие особенности Kotlin вам нравятся и не нравятся
Что проверяют
Есть ли у вас собственный опыт с языком, а не пересказ документации. Интервьюер хочет услышать осознанные плюсы и честные минусы и почти всегда просит пример: где особенность помогла или помешала в вашем проекте.
Как отвечать
Возьмите две-три вещи с каждой стороны и привяжите к своему Android-коду. Что обычно нравится:
- null safety:
StringиString?различаются, есть?.,?:и умное приведение после проверки, падений сNullPointerExceptionстановится заметно меньше; - sealed- и data-классы:
sealed interfaceдля состояний экрана плюс исчерпывающийwhen, компилятор не даст забыть новую ветку; - корутины и
Flow: структурная конкурентность,viewModelScopeиlifecycleScopeотменяют работу вместе с экраном; - extension-функции и аргументы по умолчанию: меньше перегрузок и утилитных классов. Плюс на Kotlin построен Compose.
Честные минусы, которые звучат как опыт, а не как придирка:
- platform types: значение из Java приходит как
String!, компилятор не знает, бывает ли тамnull, и защита ломается на стыке; - скорость сборки: kapt медленный, его меняют на KSP. Компилятор K2 из Kotlin 2.0 ускорил сборку, но на больших проектах время сборки остаётся темой;
- ловушки корутин:
catch (e: Exception)перехватываетCancellationExceptionи ломает отмену, аGlobalScopeведёт к утечкам; - читаемость: цепочки
let,apply,alsoпревращают код в головоломку.
Примеры и цифры приводите свои: какой класс багов ушёл после перехода на sealed-классы, сколько сэкономил переход с kapt на KSP. Если на Kotlin были только учебные проекты, так и скажите и опирайтесь на то, что пробовали сами.
Где спотыкаются
Говорят «минусов нет». Это звучит как отсутствие опыта: у любого языка на практике они находятся.
Называют плюсом оператор !!. Он наоборот отключает проверку и возвращает тот самый NullPointerException.
Приводят устаревшие аргументы: плагин kotlin-android-extensions с синтетическими вьюхами давно удалён, а прибавка к APK от стандартной библиотеки после R8 невелика. Такие детали выдают знания из старых статей.