ANDROID_LIVE Telegram 539
​​Почему 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. 🤔
Ссылка на документацию по инструменту тут.



tgoop.com/android_live/539
Create:
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

View MORE
Open in Telegram


Telegram News

Date: |

In the next window, choose the type of your channel. If you want your channel to be public, you need to develop a link for it. In the screenshot below, it’s ”/catmarketing.” If your selected link is unavailable, you’ll need to suggest another option. Commenting about the court's concerns about the spread of false information related to the elections, Minister Fachin noted Brazil is "facing circumstances that could put Brazil's democracy at risk." During the meeting, the information technology secretary at the TSE, Julio Valente, put forward a list of requests the court believes will disinformation. To view your bio, click the Menu icon and select “View channel info.” The best encrypted messaging apps 6How to manage your Telegram channel?
from us


Telegram Android Live 🤖
FROM American