در نوشته ی قبلی تاریخچه ی مختصری از تکنولوژی هایی که برای توسعه ی موبایل اپلیکیشن وجود دارد را دیدیم. اگر نوشته ی قبلی را نخوانده اید توصیه می کنم حداقل یک نگاه کلی به آن بیندازید، خالی از لطف نیست! از اینجا بخوانید: سیر توسعه ی اپلیکیشن های موبایل چندسکویی (Cross-Platform Apps)
در آنجا گفتیم که یکی از بهترین گزینه ها برای توسعه مولتی پلتفرم، فریمورک React Native است. حالا می خواهیم بیشتر با این فریمورک آشنا بشویم، ببینیم این فریمورک چه ویژگی هایی دارد که باعث شده اینقدر محبوب بشود و چه مزایا و معایبی دارد.
اReact Native یک فریمورک جاوااسکریپت برای نوشتن موبایل اپلیکیشن های واقعی و قابل اجرا به صورت native در اندروید و iOS است. React Native برپایه ی React (یک کتابخانه ی جاوااسکریپت توسعه داده شده توسط فیسبوک برای ایجاد واسط کاربری (User Interface)) ایجاد شده است، با این تفاوت که هدفش به جای تولید وب اپلیکیشن، موبایل اپلیکیشن است. به زبانی دیگر، توسعه دهندگان وب می توانند اپلیکیشن موبایلی بنویسند که واقعا مشابه یک موبایل اپلیکیشن واقعی است! و این کار با استفاده از این کتابخانه ی فوق العاده صورت می گیرد. هم چنین از آن جایی که اکثر کدی که شما می نویسید می تواند برای پلتفرم های مختلف مورد استفاده قرار بگیرد، React Native به شما این قابلیت را می دهد که به طور هم زمان برای هر دو پلتفرم اندروید و iOS برنامه ی خود را توسعه دهید. این فوق العاده است!
نحوه ی برنامه نویسی در React Native بسیار شبیه به React است که ترکیبی از جاوااسکریپت و زبانی شبیه به XML که نامش JSX است. یک نمونه کد ساده آن به شکل زیر است:
در پشت پرده اتفاقی که می افتد این است که React Native یک پل (bridge) میان برنامه ای که ما به زبان جاوااسکریپت نوشته ایم و واسط (API) های دسترسی به ماژول های اصلی سیستم عامل (در اینجا اندروید و iOS) ایجاد می کند و بنابراین، برنامه شما با استفاده از اجزای واقعی UI موبایل ایجاد می شود، نه webview! این باعث می شود که برنامه ی شما تا حد زیادی شبیه برنامه هایی باشد که با اندروید یا iOS تولید می شوند. برای دسترسی به اکثر ویژگی های مهم موبایل، React Native واسط هایی را درنظر گرفته است. به عنوان مثال برای دسترسی به دوربین، دسترسی به موقعیت مکانی (location)، ذخیره ی اطلاعات برنامه در حافظه تلفن همراه و ... .
برنامه نویسی با React Native نسبتا ساده، سریع و کارآمد است. اگر در فضای توسعه ی وب باشید و با نسل جدید جاوااسکریپت (ES6/ES7) کار کرده باشید خیلی سریع می توانید React Native را یاد بگیرید و اپلیکیشن دلخواه خودتان را بسازید!
برای اینکه با استفاده از React Native اپلیکیشن خود را توسعه دهید نیازی به یادگیری جاوا یا Swift ندارید اما باید با اکوسیستم توسعه ی اپلیکیشن اندروید و iOS آشنایی داشته باشید. منظورم از اکوسیستم توسعه این است که بدانید در اندروید gradle چه کاری انجام می دهد، فایل manifest.xml چیست، تصاویر، فونت ها و ... در چه دایرکتوری قرار می گیرند، ماژول های سیستمی که اضافه می شود در چه فایل هایی از دایرکتوری android تغییرات ایجاد می شود و ... . هم چنین در سمت iOS فایل info.plist چه اطلاعاتی دارد، چگونه از Pod برای استفاده از ماژول های مدنظرمان به درستی استفاده کنیم، با فضای کلی Xcode آشنایی داشته باشیم و ... . نترسید! همه ی این ها را وقتی به طور جدی درگیر انجام یک پروژه با React Native بشوید یاد می گیرید. من خودم وقتی اولین پروژه ام را با React Native شروع کردم صرفا اطلاعات محدودی از توسعه ی اپ اندروید داشتم اما با جستجوی مناسب همه ی آنچه نیاز داشتم را پیدا کردم، از رفع ارورهای خنده دار و پیش پا افتاده تا خروجی گرفتن برای اندروید و iOS و حتی آپلود اپلیکیشن در پلی استور و اپ استور!
در ادامه برخی مزایا و هم چنین معایب استفاده از این فریمورک را خیلی سریع بررسی می کنیم.
توسعه ی سریع اپلیکیشن
از آن جایی که React Native برای این ساخته شد که برنامه نویسان وب بتوانند به راحتی موبایل اپلیکیشن هم توسعه بدهند، بنابراین قواعد آن تا حد زیادی شبیه به برنامه نویسی وب است و می توانید سریع تر از جاوا یا سوئیفت برنامه ی خود را توسعه دهید.
مولتی پلتفرم
قابلیت بعدی React Native که خیلی باارزش هم هست مولتی پلتفرم بودن آن است. شما با تغییراتی اندک در ساختار کد خود می توانید هر دو خروجی اندروید و آی او اس را داشته باشید. این یعنی نیاز به دو تیم مختلف برای موبایل اپلیکیشن ندارید و در زمان و هزینه های خود صرفه جویی می کنید. برای استارتاپ ها دو فاکتور قبلی بسیار حیاتی است!
عملکرد قابل قبول
اگرچه ممکن است آن پلی که میان جاوااسکریپت و دسترسی های native اپلیکیشن ایجاد شده است تاحدی باعث کند شدن برنامه بشود اما شما اکثرا این کندبودن را حس نمی کنید! چرا که در اغلب موارد نیازی نیست که این جابه جایی از ناحیه ی جاوااسکریپت به native رخ بدهد و برنامه کاملا مانند یک اپلیکیشن متداول با سرعت بالا کار می کند. این برتری بالای React Native نسبت به رقبای قدیمی تر مثل اپ های WebView و زامارین است.
ماژولار بودن و قابلیت توسعه
یکی از ویژگی هایی که شخصا خیلی دوستش دارم همین ویژگی است. بگذارید با یک مثال این بخش را توضیح بدهم. در یکی از اپلیکیشن هایی که با React Native توسعه می دادم نیاز داشتم که پس از دریافت اس ام اس برنامه به طور خودکار کد ارسالی را بخواند. با کمی جستجو متوجه شدم این ماژول پیاده شده است اما دیگر پشتیبانی نمی شود بنابراین خودم دست به کار شدم و از آن جایی که قابلیت خواندن اس ام اس فقط در اندروید وجود دارد (البته آن هم دارد برداشته می شود!) کد اندروید آن را پیدا کرده و با یک پورت زدن (همان پل زدن بین اندروید و جاوااسکریپت) این قابلیت را به برنامه اضافه کردم. به همین راحتی! هر کسی می تواند سرویسی که نیاز دارد را خودش پیاده کند و در برنامه اش از آن استفاده کند. به این کار توسعه ی سرویس های اختصاصی (Custom Service) می گویند.
سرعت تغییرات بالا
فریمورک React Native هنوز در نسخه ی بتا است و جای کار زیادی دارد. (در حال حاضر آخرین نسخه ی آن 0.59 است.) بنابراین اگر امروز یک پروژه ی جدید را با آن شروع کنید ممکن است برنامه ی اولیه شما با خطا مواجه شود! بنابراین اگر وارد برنامه نویسی React Native می شوید این نکته را درنظر داشته باشید که شما هم باید بتوانید هم زمان با این تغییرات جلو بروید.
پایدارنبودن کتابخانه های جانبی
یکی از مشکلاتی که هنوز هم با آن دست و پنجه نرم می کنم خطاهایی است که هنگام آپدیت کردن برنامه ام به آن برخورد می کنم. فرض کنید ورژن react برنامه شما 16.6 و ورژن react native برنامه شما 0.57 است و چندین کتابخانه وابسته هم استفاده کرده اید. حالا اگر این کتابخانه ها را به آخرین ورژن آپدیت کنید به احتمال خیلی زیاد به خطاهای زیادی برخورد خواهید کرد! این واقعا آزاردهنده است و امیدوارم با تغییراتی که قرار است تیم react native روی هسته ی آن شکل دهد این مشکل هر چه زودتر برطرف شود.
جمع بندی
با تمام حرف های گفته شده اگر علاقه مند به توسعه موبایل اپلیکیشن هستید و قصد دارید کل بازار را هدف قرار دهید (برای هر دو پلتفرم بازار اپ خود را عرضه کنید) دو گزینه پیش رو دارید:
1. از دو تیم مختلف برای توسعه اندروید و آی او اس به طور مجزا استفاده کنید.
این کار هزینه و احتمالا زمان بیشتری می طلبد.
2. از یک تیم متخصص در زمینه توسعه مولتی پلتفرم استفاده کنید.
در حال حاضر دو تکنولوژی معروف و قابل اطمینان برای توسعه مولتی پلتفرم React Native و Flutter هستند که هر دو توسط دو کمپانی بزرگ یعنی فیسبوک و گوگل پشتیبانی می شوند. هر دوی این تکنولوژی ها به سرعت در حال رشد هستند و می توان با آن ها به توسعه اپ پرداخت اما در حال حاضر اگر به بازار کار نگاهی بیندازید متوجه می شوید اکثر شرکت ها متقاضی توسعه دهنده react native هستند و فلاتر هنوز خیلی شناخته شده نیست!
در انتها چند لینک برای مطالعه بیشتر در این زمینه را در پایین می آورم:
https://www.simplytechnologies.net/blog/2018/4/4/lets-get-clear-about-react-native
https://www.codementor.io/saketkumar95/how-react-native-works-mhjo4k6f3
http://www.discoversdk.com/blog/how-react-native-works
ممنون می شوم اگر این مقاله کمکی به شما کرد با لایک و بازنشر، باعث بیشتر دیده شدن آن شوید.