مقدمه ای بر برنامه نویسی مدرن اندروید در سال ۲۰۱۹

در سال های اخیر ما برنامه نویس های اندروید، تغییرات زیادی را از منظر زبان برنامه نویسی، محیط برنامه نویسی، SDK و ورژن های اندروید شاهد بوده ایم که فرصت ها، محدودیت ها و قابلیت های جدیدی را پیش روی مان قرار داده است. بنابراین به عنوان یک برنامه نویس اندروید اگر دائما به دنبال بروزرسانی اطلاعات فنی خود در این حوزه نباشیم، به همان اندازه که یاد گرفته ایم و تجربه کسب کرده ایم، به همان اندازه نیز از دنیای ناشناخته‌ی امکانات جدید آن عقب مانده ایم. در این مقاله به همین موضوع یعنی برنامه نویسی مدرن اندروید اشاره خواهیم نمود و تغییر و تحولاتِ این حوزه را با هم مرور کوتاهی خواهیم کرد.

کدام زبان برنامه نویسی؟ جاوا یا کاتلین؟

احتمالا هنوز پرسش بسیاری از برنامه نویسان اندروید این است که بالاخره با جاوا کد بزنند یا کاتلین؟ جواب این پرسش به چند نکته بستگی دارد. فارغ از آنکه شما در چه شرکتی مشغول به کار هستید و یا اینکه پروژه های‌تان چه زبانی را در حال حاضر پشتیبانی می کند که خود مساله ای مهم است، اینکه چقدر حاضرید ریسک یادگیری یک زبان جدید را بپذیرید و چقدر وقت دارید که این کار را به سر انجام برسانید و در آخر اینکه چقدر حاضرید در برابر به روز بودن در حوزه کاری تان از خود مقاومت نشان ندهید همگی دلایل اصلی برای یادگیری یک زبان جدید محسوب می شوند.

با این همه هنوز هیچ کس در دنیا نتوانسته ادعا کند که زبان کاتلین بهتر یا بدتر از جاوا است. در کل در دنیای امروز بحث سر بهتر یا بدتر بودن نیست. همه دلایلی که برای رفتن به سمت زبان کاتلین معرفی می شوند، مبتنی بر چند استدلال مشابه است. گوگل خود در وبسایت رسمی اندروید، زبان کاتلین را زبان رسمی توسعه اندروید معرفی کرده است (این را در گوگل IO سال ۲۰۱۷  اعلام کردند). همه‌ی پروژه های آموزشی و کاربردی گوگل برای معرفی کتابخانه های جدید همگی به زبان کاتلین توسعه داده شده و همه آموزش ها از این پس نیز به زبان کاتلین نوشته می شوند. این موضوع در شرکت های بزرگ دنیا هم دغدغه‌ی مهمی محسوب می گردد. به طور نمونه شرکت اوبر در جدیدترین مقالات مهندسی خود به این نکته اشاره می کند. اوبر با اشاره به اینکه سرعت build در اندروید استودیو برای یک پروژه اندروید با زبان کاتلین کمی کمتر از سرعت build یک پروژه اندرویدی به زبان جاواست (که این تفاوت البته خیلی هم زیاد نیست و دلایل منطقی خود را دارد) در ادامه به این نکته اشاره می کند که ۹۵ درصد از ۱۰۰ برنامه نویس موبایل خود بر این بار بوده اند که حاضرند این موضوع را بپذیرند اما به جای آن از توانایی ها و امکاناتی که این زبان (یعنی زبان کاتلین) در اختیار آنها قرار می‌دهد (مانند کد تمیزتر، خوانا تر و کوتاه تر) استفاده کنند. اگر این موضوع را می‌خواهید دنبال کنید، می توانید این مقاله را بخوانید. اما اگر به مستندات گوگل مراجعه کنیم، خواهیم دید که گوگل در صفحه رسمی اندروید دلایل زیر را برای مهاجرت به زبان کاتلین بر می‌شمارد.

  • ویژگی های زبان مدرن کاتلین شما را قادر می سازد تا برای پیاده سازی ایده های خود کد کمتری را بنویسید. کد کمتر به طبع کد کمتری برای تست و نگهداری لازم دارد. بعضا کدی که به زبان جاوا ده خط مجبور بودید برای آن بنویسید را شاید در کاتلین با دو خط بتوانید پیاده سازی کنید.
  • کیفیت برنامه خود را با کاتلین بهبود دهید. برچسب های @Nullable و@NonNull که برای جلوگیری NullPointerExceptions پیشتر استفاده می شد اکنون در کاتلین به طور کامل پشتیبانی می شود. کاتلین همچنین دارای بسیاری از ویژگی های زبانی دیگر است که به جلوگیری از اشتباهات رایج برنامه نویسی کمک میکند.
  • فراخوانی متدهای جاوا وقتی با کاتلین کد میزنیم و فراخوانی متد های مکاتلین از جایی که با جاوا کد میزنیم به طور کامل در اندروید استودیو پشتیبانی میشود. بنابراین شما می توانید در پروژه تان هم از کاتلین و هم از جاوا بهره ببرید.
  • اندروید استودیو به طور کامل با زبان کاتلین سازگار است و کلی از امکانات را اعم از تبدیل کلاس های جاوا و کاتلین به یکدیگر و سایر امکانات را به برنامه نویسان ارائه می دهد.

مهاجرت به کاتلین هنوز یک انتخاب برای برنامه نویس محسوب می شود. اما نه یک انتخاب ساده، که یک انتخاب هوشمندانه. متاسفانه زبان تنها مساله ای نیست که برنامه نویسان اندروید این روزها با آن دست و پنجه نرم می کنند (ما هنوز بحث فلاتر را باز نکرده ایم. زبان دارت خود داستان مفصل دارد که در این پست به آن اشاره نمی کنیم). همانطور که چهار پنج سال پیش بحث سر این بود که هنوز با اکلیپس کد بزنیم یا اندروید استودیو ( و امروز دیگر کسی اکلیپس را به خاطر نمی آورد) کاتلین و جاوا هم گویا به همین سرنوشت دچار خواهند شد. البته ما در حوزه برنامه نویسی اندروید موضوع را بررسی کردیم. زبان جاوا کاربردهای زیادی دارد که ما به آن اشاره نکردیم.

AndroidX یا Support

بعد از عبور از انتخاب زبان برنامه نویسی می رسیم به استفاده از کتابخانه های مدرن اندروید. به عنوان مثال androidx  چیز عجیبی نیست اما در پروژه های جدید می بایست همه کتابخانه های Support را با آن جایگزین کنیم. اگر میخواهیم آخرین آپدیت های کامپوننت های  View را در اپ خودمان داشته باشیم باید خیلی زودتر به Androidx مهاجرت کنیم. به طبع باید همه فایل های xml و همه import های قبلی پروژه قبلی مان را مجددا بازنگری کنیم. که البته برای این موضوع اندروید استودیو خود امکان مهاجرت به Androidx  رو برای ما فراهم کرده است که با یک کلیک بتوانیم کلک قضیه را بکنیم. شاید بپریسد این کارها برای چیست؟ باید بگوییم که نه تنها برنامه نویس ها که خود گوگل هم از مدیریت ورژن های Support Library ها خسته شد و دیگر بجای ورژن های گوناگون v4, v7, v12, v13 یک کتابخانه واحد و سازگار داریم به اسم androidx. مثلا نمونه زیر فرگمنت است که همانطور که میبینید پکیج آن عوض شده است. برای مشاهده همه‌ معادل های کتابخانه های support در Androidx میتوانید این صفحه را ببینید.

com.android.support:support-fragment androidx.fragment:fragment

معماری نرم افزار، آش حروف الفبا

شاید تا سه سال ‍پیش کمتر کسی دغدغه انتخاب معماری نرم افزار برای یک پروژه اندروید داشت و برنامه نویسان حرفه ای نهایتا با پیاده سازی مدل های مشابه در پروژه های دیگر سعی بر این داشتند تا اصول لایه بندی و برنامه نویسی چند لایه را به پروژه های اندرویدی وارد نمایند. امروز که شما این مطلب را می‌خوانید احتمالا ده ها معماری مدرن برای پروژهای اندروید معرفی شده اند که شاید اسامی چند تا از آن ها را شنیده باشید مانند MVVM  یا Mvp، MVI، VIPER و … که همگی همینطور که متوجه شده اید از سر هم شدن یک سری حروف انگلیسی تشکیل شده اند و تا دلتان بخواهد آموزش و بحث بر سر خوبی یا بدی هر کدام در سرتاسر وبلاگ ها و سایت مرتبط با برنامه نویس اندروید وجود دارد. پس واقعا لازم است که ما با معماری های نرم افزاری قابل پیاده سازی در اندروید آشنا باشیم و از قابلیتهای آنها در طراحی نرم افزارمان استفاده کنیم. می توانید فعلا این مقاله را بخوانید تا با این پدیده بیشتر آشنا بشید.

طراحی UI

طراحی و چیدمان المان های UI هم موضوعی است که این روزها دستخوش تغییر است و دیگر روش های قدیمی طراحی و چیدمان لایه های UI (مثل استفاده از LinearLayout یا RelativeLayout) دیگر تنها راه حل پیش روی برنامه نویسان اندروید نیست و امروزه ConstraintLayout ها با امکاناتی که اندروید استودیو در اختیار قرار میدهد محبوبیت بیشتری بین برنامه نویسان دارد.

مدیریت منابع حافظه
شاید کمتر کسی در سال های گذشته کلمه‌ی نشتی حافظه در اندروید را به زبان می آورد. اما این روزها نشت حافظه یا Memory Leak که از مباحث اساسی توسعه نرم افزار است اهمیت زیادی پیدا کرده است. معمولا این روزها یکی از سوالات مصاحبه همه شرکت ها همین موضوع است که شما چگونه از نشت حافظه جلوگیری می کنید. برای این موضوع هم تا دلتان بخواهد مطلب و بحث روی اینترنت است و کلی ابزار مانند LeakCanary معرفی شده اند تا با کمک آنها بتوانید با نشتی حافظه مقابله کنیدو.

تزریق وابستگی

تزریق وابستگی هم یکی از آن چیزهایی است که احتمالا زیاد به گوشتان می خورد و در همه آگهی های استخدام می بینید که آشنایی با مثلا کتابخانه Dagger از ملزومات دستیابی به شغل مورد نظر است. در رابطه با Dagger  هم هزاران مطلب آموزشی نوشته شده است و امروزه به یک بایدی تبدیل شده که به کار تست نرم افزار هم می آید. تزریق وابستگی البته به قول معروف یک عبارت ۲۵ دلاری است که ۵ سنت هم البته بیشتر نمی ارزد (اشاره به این دارد که خیلی هم چیز عحیب غریبی نیست و نباید از اسم آن ترسید – این مقاله را بخوانید).

ORM و دیتابیس

یکی از چیزهایی که در سال های گذشته خیلی کاربرد پیدا کرده است استفاده از ORM ها برای پیاده سازی لایه دیتابیس در برنامه است. ORM یک تکنیک در برنامه نویسی است که یک مدل Object Oriented از ساختار دیتابیس در برنامه ایجاد میکند تا بتوان راحت تر با دیتابییس در معماری شی گرا کار کرد.  ORM ها در اندروید یک لایه انتزاعی دور SQLite اندروید می‌کشند که بتوان راحت تر با آن کار کرد. تا به امروز خیلی ها کتابخانه های مختلفی را برای پیاده سازی این مدل در اندروید منتشر کرده اند. اما به یاد داشته باشید گوگل در دو سه سال گذشته، Room را معرفی کرده است که علاوه بر اینکه یک ORM است، بلکه کاملا سازگار با کتابخانه Jetpack نیز هست (این کتابخانه خود داستان مفصل دارد که در یک مقاله دیگر بایستی به آن پرداخت)

سخن پایانی

اگر به تازگی در مصاحبه های اندروید شرکت کرده باشید حتما به این نکته پی برده اید که دیگر مثل گذشته تجربه توسعه و انتشار یک یا چند برنامه در مارکت به عنوان رزومه یک برنامه نویس حرفه ای مورد قبول شرکتهای مطرح این حوزه نیست. یک برنامه نویس ارشد اندروید علاوه بر تسلط به SDK اندروید، طراحی UI و کار با کتابخانه های معروف مثل Retrofit و کار با دیتابیس می بایست به موضوعات جدیدی مثل برنامه نویسی واکنش گرا (مثل RxJava یا RxKotlin)، تزریق وابستگی از طریق Dagger، کار با Navigation، معماری های مطرح اندروید (مثل MVVM و MVP)، آشنایی با ابزارهای Unit Testing و کار با JetPack تسلط کافی داشته باشد.

در این مقاله سعی کردیم نگاه مختصری به آنچه امروز در دنیای برنامه نویسی اندروید می گذرد داشته باشیم و کلیدواژه های مهم این روزهای برنامه نویسی اندروید را با یکدیگر مرور کنیم. امروز حجم مباحث مطرح شده در اندروید به حدی است که دیگر شاید نتوانید یک برنامه نویس اندروید را پیدا کنید که به همه آن ها مسلط باشد (اگر جیک وارتون را البته مستثنی قرا دهیم!). در مقاله بعدی به مبحث Navigation در اندروید می پردازیم که مقوله جدید و مهمی است و اتفاقا خیلی هم جذاب است.

دیدگاهتان را بنویسید

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