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

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

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

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

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

گوگل در صفحه رسمی اندروید دلایل زیر را برای مهاجرت به زبان کاتلین بر میشمارد.

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

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

بعد از عبور از انتخاب زبان برنامه نویسی می رسیم به استفاده از کتابخانه های مدرن اندروید. چند موضوع را در ادامه به آن خواهیم پرداخت. به عنوان مثال androidx  چیز عجیبی نیست اما در پروژه های جدید می بایست همه کتابخانه های AppCompat را با آن جایگزین کنیم. یا مثلا سرویس ها در اندروید به کل مفاهیم جدیدی به خود گرفته اند یا مثلا همین کتابخانه های Jetpack و کلی چیز دیگر که هر کدام نیاز به یک مطلب مفصل دارد.

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

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

طراحی UI

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

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

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

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

برنامه نویس  ارشد اندروید

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

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

Facebooktwittergoogle_plusredditpinterestlinkedinmailFacebooktwittergoogle_plusredditpinterestlinkedinmail




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

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