tgoop.com/android_live/539
Last Update:
Почему Kotlin Synthetics Deprecated?
#kotlin
Несколько месяцев назад Android Kotlin Extensions Gradle плагин был помечен depricated. Он давал нам две классных фичи:
• Synthetics — плагин, который позволяет заменить findViewById;
• Parcelize — плагин, который позволяет создавать Parcelable при помощи одной аннотации, без использования boilerplate.
Parcelize никуда не уходит, а только перемещается в отдельный плагин kotlin-parcelize, а вот Synthetics уходит навсегда. Давайте посмотрим предпосылки, почему это произошло.
Но прежде рассмотрим все существующие подходы для поиска View.
1️⃣findViewById — функция, которая проходит по иерархии View и находит по идентификатору ту, которая необходима.
Имеет ряд существенных недостатоков:
➖метод поиска дорогой и разработчики часто используют этот метод повторно не задумываясь о последствиях производительности;
➖метод не null safe, то есть если в дереве не найдётся View с переданным идентификатором, то будет NullPointerException
;
➖нет кастования до требуемой View до Android API 26;
➖много boilerplate кода, особенно когда в классе много View.
Есть библиотека Butter Knife, которая заметно уменьшала количество кода, однако и сократила скорость сборки приложения, к тому же не решала ряд проблем. Сейчас она также depricated.
2️⃣Kotlin Synthetics — по сути вызывал описанный выше метод единожды и кэшировал полученные значения.
Из плюсов:
➕нет boilerplate кода, ведь всё что требуется — это настроить плагин в Gradle и использовать идентификаторы прямо из xml-файла;
➕type safety, то есть вам не надо делать никаких кастов.
Но давайте пройдёмся по недостаткам:
➖частично null safe. К счастью, если вы удалите какую-то view из xml, то в коде также будет подсветка удалённой View. Однако, если вы используете несколько конфигурационных файлов, то есть шанс нарваться на NullPointerException
.
➖загрязнение namespaces. Если вы имеете несколько одинаковых идентификаторов в разных xml-файлах, то есть риск импортировать неверный файл и также получить NullPointerException
.
➖работает только в Kotlin. Может быть не критичным для тех проектов, который написаны на Kotlin, но критично для тех, у кого есть Java.
Именно из-за описанных недостатков он и был помечен depricated.
Давайте обратимся к альтернативе. ⤵️
3️⃣View Binding — в целом, урощённая версия Data Binding, который по сути «биндится» только для ссылок на View, не связываясь с данными.
Плюсы:
➕нет boilerplate кода;
➕полностью null safe;
➕type safety;
➕нет влияния на build time в отличии от Data Binding;
➕поддерживается как в Java, так и в Kotlin
Отмечу один минус: чуть больше строк кода в сравнении с Kotlin Synthetics, ведь необходимо создать экземпляр переменной binding, которую придётся использовать потом повсюду.
Хотя я и сам очень любил Kotlin Synthetics, и мирился с его недостатками, но теперь придётся переезжать на View Binding. 🤔
Ссылка на документацию по инструменту тут.
BY Android Live 🤖

Share with your friend now:
tgoop.com/android_live/539