علیرضا احمدی

منسوخ شدن Kotlin Android Extensions

Kotlin Android Extensions

افزونه Kotlin Android Extensions منسوخ شد :

چندی پیش شرکت Jetbrains اعلام کرد که از کاتلین نسخه 1.4.20 به بعد، دیگر پلاگینی تحت عنوان kotlin android extensions وجود نخواهد داشت و منسوخ خواهد شد. این قضیه نگرانی های زیادی را برای برنامه نویسان اندروید به وجود آورد. نگرانی ها از آنجایی بیشتر شد که در نسخه جدید اندروید استودیو، پلاگین kotlin android extensions از حالت پیشفرض خارج شد؛ خارج شدن این افزونه از حالت پیشفرض سبب عدم شناسایی view ها در اکتیویتی شد.

البته راه حلی نظیر افزودن دستی این افزونه به فایل build.gradle هم عنوان شده است. هر چند این روش زیاد مناسب پیاده سازی نیست. چراکه این افزونه منسوخ شده و بهتر است هر چه سریع تر به سراغ جایگزین های آن برویم. در ادامه به بررسی ویژگی های kotlin android extensions پرداخته و جایگزین های این افزونه پر کاربرد را نیز معرفی خواهیم کرد.

ویژگی های افزونه kotlin android extensions چه بود ؟

این افزونه با اضافه شدن به پروژه اندروید استودیوی شما دو ویژگی منحصر به فرد برایتان فراهم میکرد. ویژگی اول Synthetics و ویژگی دوم Parcelize که البته ممکن است بیشتر ما فقط با همان ویژگی Synthetics این افزونه کار کرده باشیم. خوب بیایید هر کدام ازین ویژگی های منحصر به فرد افزونه kotlin android extensions را با هم مورد بررسی قرار دهیم. 

ویژگی Synthetics :

این ویژگی افزونه kotlin android extensions شاید بهترین و ملموس ترین ویژگی این افزونه بوده است. همه ما میدانیم که در زبان جاوا برای دسترسی به view هایی که در XML تعریف میشد، بایستی از دستور findViewById استفاده میکردیم. به علت مشکلاتی که این روش به وجود می آورد، در زبان جاوا هم حتی برنامه نویسان از دستور findViewById استفاده نکرده و به سراغ کتابخانه هایی نظیر Butter Knife میرفتند. 

اما با روی کار آمدن زبان کاتلین و استفاده کاتلین از پلاگین kotlin android extensions دیگر این نگرانی رفع شده بود. چراکه با ویژگی Synthetics این افزونه، برنامه نویسان قادر به شناسایی view های خود در اکتیویتی بدون نیاز به cast کردن بودند. ( cast : findViewById ) پس این ویژگی منحصر به فرد افزونه kotlin android extensions بود که ما را قادر به شناسایی view ها میساخت.

ویژگی Parcelize :

با استفاده ازین ویژگی، برنامه نویسان کاتلین قادر به ساختن کلاس های Parcelize بودند که توضیح چیستی این نوع کلاس و طریقه استفاده از آن، از حیطه این مقاله خارج میباشد. اما اگر شما ازین ویژگی افزونه kotlin android extensions استفاده میکردید، نگران نباشید. چراکه در حال حاضر Parcelize به صورت یک کتابخانه مجزا در اختیار برنامه نویسان قرار گرفته است. بدین شکل : kotlin-parcelize

چرا kotlin android extensions منسوخ شد :

کاتلین در ابتدای ظهور خود به قصد بهتر بودن از جاوا در زمینه برنامه نویسی اندروید متولد شد. هر پلاگین یا ساختار اشتباهی که سبب بهم ریختگی برنامه و از بین رفتن یکپارچگی کد در کاتلین شود، در این زبان برنامه نویسی جایی نخواهد داشت. در هنگام استفاده از قابلیت Synthetics مجموعه ای از id ها در هر اکتیویتی برای استفاده برنامه نویس لیست میشود. بسیاری ازین id ها هیچ ربطی به اکتیویتی مدنظر نداشته و به صورت global نمایش داده میشوند. این یک مشکل گیج کننده و احتمالا تداخل دهنده خواهد بود.

مشکل دیگر موجود در افزونه kotlin android extensions این است که اگر برخی view ها فقط در برخی پیکربندی ها قابل استفاده باشند، باز هم در ویژگی Synthetics متوجه آن نخواهیم شد و احتمال رفرنس دهی به یک مقدار تهی وجود خواهد داشت. در هر صورت مجموعه این مشکلات سبب بالا رفتن احتمال کرش کردن برنامه ها در کاتلین شده بود. پس جت برینز و گوگل نیز تصمیم به حذف kotlin android extensions گرفتند. 

حال گزینه های پیش روی ما کدام اند ؟

پیش تر گفتیم که یکی از راه های عنوان شده، افزودن دستی پلاگین kotlin android extensions به فایل build.gradle میباشد. اما باز هم نکته حائز اهمیت این خواهد بود که ما هرگز پیشنهاد نمیکنیم که شما به عنوان یک توسعه دهنده بروز، از ساختار های منسوخ شده استفاده کنید. پس در ادامه برخی از گزینه های موجود در این زمینه را بررسی میکنیم. 

1 – findViewById :

در روش findViewById زمانی که ما یک view را cast میکنیم، کامپایلر شروع به گشت و گذار در فایل XML کرده و به ترتیب همه id ها را چک میکند. چنانچه در نهایت id مدنظر پیدا شود، آن را برمیگرداند و در صورت نیافتن id مقدار null را بازگشت خواهد داد. مقدار null برگشتی هم سبب خطای Null Pointer Exception خواهد شد. چک کردن ترتیبی همه id ها برای یافتن id مدنظر سبب کند شدن نرم افزار خواهد شد. پس استفاده از findViewById هزینه بردار خواهد بود و به هیچ عنوان یک گزینه توصیه شده نیست. 

2 – Butter Knife :

کتابخانه Butter Knife سالها در زبان برنامه نویسی جاوا مورد استفاده و استقبال برنامه نویسان اندروید قرار گرفته بود. اما از آنجایی که این کتابخانه نیز برای پیدا کردن view های مدنظر از Annotation استفاده میکند، روشی توصیه شده نیست. در واقع استفاده از این روش منابع گوشی را اشغال کرده و ممکن است سبب بروز مشکل در سرعت Load شود. در کاتلین این کتابخانه نیز منسوخ شده طلقی میشود. 

3 – Data Binding :

درست زمانی که گوگل استفاده از معماری MVVM را به برنامه نویسان اندروید پیشنهاد کرد، کتابخانه Data Binding را نیز معرفی و تاکید کرد که در معماری MVVM ازین کتابخانه برای الحاق کردن view به کلاس های کاتلین استفاده شود. کتابخانه Data Binding جهت اتصال فایل XML به کلاس کاتلین استفاده میشود. بدین منظور که ما قادر خواهیم بود برخی متد های خود را درون XML به صورت مستقیم فراخوانی کنیم.

اگر شما قصد پیاده سازی معماری MVVM در نرم افزار خود را دارید، بدون شک بهترین گزینه پیش روی شما برای دسترسی به view ها، همین Data Binding خواهد بود. اما در صورتی که از معماری MVVM استفاده نمیکنید، و صرفا قصد شناسایی view های خودتان را دارید، استفاده از Data Binding میتواند برای شما دردسر ساز و شلوغ کننده باشد. چراکه در صورت عدم استفاده از معماری MVVM شما به بسیاری از امکانات Data Binding نیازی نخواهید داشت.

4 – View Binding :

اگر شما به دنبال جایگزین اصلی kotlin android extensions میگردید باید بدانید که طبق اعلام گوگل، View Binding جایگزین ویژگی Synthetics شده است. در صورتی که قصد شما صرفا شناسایی view ها باشد و قصد استفاده از معماری MVVM را نداشته باشید، بهتر آن است که از View Binding استفاده کنید. این ویژگی پس از فعال شدن در فایل build.gradle شروع به ساختن کلاس های building برای XML های شما میکند. 

همانطور که میتوان حدس زد، برای هر کدام از XML های شما یک کلاس Building ایجاد خواهد شد که میتوانید از آن کلاس برای دسترسی به view های خود در ساختار اکتیویتی استفاده کنید. در این روش دیگر تداخل های مرسوم که در kotlin android extensions وجود داشت، دیده نمیشود. پس میتوان اینگونه در نظر داشت که پلاگین محبوب kotlin android extensions به نفع View Binding کنار کشیده است. (آموزش کار با View Binding)

تفاوت Data Binding و View Binding در چیست ؟

همانطور که پیش تر گفته شد، شما با استفاده از Data Binding قادر به اتصال XML به کلاس کاتلین خواهید بود و خواهید توانست در فایل XML خود متغیر هایی تعریف کرده و متد هایی را فراخوانی کنید. اما در View Binding به این شکل نخواهد بود و صرفا شما خواهید توانست در اکتیویتی خود به view ها دسترسی پیدا کنید. در ضمن Data Binding فقط برای XML هایی کلاس میسازد که دارای تگ باشند اما View Binding برای تمامی XML ها شروع به پیاده سازی کلاس های از نوع Binding خواهد کرد.

آیا View Binding و Data Binding با یکدیگر تداخل دارند ؟

جواب کاملا منفی است. شما در یک پروژه میتوانید هر دو ویژگی View Binding و Data Binding را فعال کرده و از ویژگی های آنها استفاده کنید. در این حالت View Binding برای تمام XML ها کلاس Binding ایجاد خواهد کرد. در مقابل Data Binding نیز برای تمامی XML هایی که از تگ <layout> استفاده میکنند، کلاس های متناظر با ساختار خود را خواهد ساخت. 

احساس نیاز به آموزشی جدید :

با تغییراتی که در ساختار برنامه نویسی اندروید به وجود آمده است؛ و نیز کتابخانه های زیادی که منسوخ شده و جای خود را به جایگزین های خود داده اند، بیش از پیش نیاز به یک پکیج بروزرسانی شده احساس میشود. پکیجی که تمام این بروزرسانی ها، جایگزینی ها و تغییرات متعدد را ساپورت کرده و آموزش دهد. آموزشگام نیز با توجه به درخواست های متعدد کاربران، شروع به پیاده سازی جدیدترین و بروز ترین پکیج آموزش اندروید با استفاده از زبان قدرتمند کاتلین کرد. اکنون دیگر نگران تغییرات متعدد به وجود آمده نباشید؛ چراکه همه آنها در این پکیج آموزش داده خواهند شد. 

دوره آموزش برنامه نویسی اندروید با کاتلین ورژن 2023

چکیده مطلب :

پلاگین kotlin android extensions منسوخ شده و ما دیگر نخواهیم توانست از ویژگی های منحصر به فرد این پلاگین استفاده کنیم. هر چند میتوانیم به صورت دستی این کتابخانه را به اندروید استودیو اضافه کنیم؛ اما استفاده از کتابخانه ای منسوخ شده به هیچ وجه توصیه نمیشود. گوگل و جت برینز جایگزین اصلی kotlin android extensions را تحت عنوان View Binding معرفی کرده اند که ازین پس بایستی از ویژگی های این کتابخانه بهره ببریم.

منابع مورد استفاده :

https://betterprogramming.pub/why-are-kotlin-synthetics-deprecated-and-what-are-the-alternatives-5c2b087dda1c
https://proandroiddev.com/migrating-the-deprecated-kotlin-android-extensions-compiler-plugin-to-viewbinding-d234c691dec7

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *