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

ابتدا قصد دارم تا توضیحی مختصر در رابطه با گزینه‌های پیش روی‌مان بدهم.

یک اپلیکیشن Native یا محلی، اپلیکیشنی است که برای یک پلتفرم خاص طراحی می‌شود. این روز‌ها دو پلتفرم موبایل وجود دارند که از دیگر موارد بسیار محبوب‌تر و پر استفاده‌تر هستند، ما این دو را با نام آی‌او‌اس و آندروید می‌شناسیم. وقتی می‌خواهید اپلیکیشنی محلی را برای آندروید بنویسید این کار را باید در آندروید استدیو و با استفاده از جاوا انجام دهید -کاتولین نیز یکی از انتخاب‌هاست-. برای آی‌او‌اس نیز از ابزار Xcode و هر دو زبان Objective-C و Swift استفاده می‌کنید.

از طرفی دیگر، React Native یک فریمورک جاوااسکریپتی متن باز است که از طرف فیسبوک توسعه داده شده، با استفاده از این فریمورک می‌توانید مفاهیم توسعه وب را در توسعه موبایل قرار دهید. توسعه این اپلیکیشن با استفاده از جاوااسکریپت انجام می‌شود اما مهم است که بدانید نتیجه یک اپلیکیشن محلی یا Native خواهد بود.

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

برنامه‌نویسی به صورت Native

  • مزایا

دسترسی به API

تمام‌ API‌ها و توابعی که پلتفرم در اختیار شما قرار می‌دهد، از طریق محیط توسعه Native در دسترس شماست. در این حالت هیچ نیازی به لایه‌ی دیگری از کارایی ندارید -لایه‌ای که نیاز به بروزرسانی دارد-. همچنین هیچ محدودیت یا وابستگی به دیگر پلتفرم‌ها در این حالت دیده نمی‌شود.

کتاب‌خانه‌های اضافی

وقتی در یک محیط Native شروع به توسعه اپلیکیشن می‌کنید، بسیار مهم است که بدانید کتاب‌خانه‌های اضافی بسیاری وجود دارد که می‌توانید از آن‌ها استفاده کنید. جامعه‌ی اینگونه محیط‌های توسعه بسیار بزرگ‌تر هستند و منابع بسیاری برای بهتر کردن تجربه توسعه‌دهندگی شما و خود اپلیکیشن وجود دارد.

درک بهتر

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

جنبه‌های بلند مدت

برای موضوع بلند مدت کار با محیط‌های توسعه محلی، یکی از امن‌ترین و بهترین انتخاب‌های ممکن است. مطمئنا آن‌ها نیز ویژگی‌های زبان و APIهای‌شان را تغییر می‌دهند -مانند اپل که از Objective-C به Swift مهاجرت کرد- اما این تغییرات سازگار هستند و در ضمن به شما راهنمای کاملی برای اینکه کدهای‌تان را به حالت جدید تبدیل کنید داده می‌شود. حداقل این ماجرا آن است که شما از این قضیه که پلتفرم بروزرسانی می‌شود و امنیت خوبی پشت آن قرار دارد، مطمئن می‌شوید.

زبان سخت‌گیرانه

تمام زبان‌های محلی برای آندروید و آی‌او‌اس زبان‌های strict یا سخت‌گیرانه‌ای به حساب می‌آیند، این زبان‌ها به شما کمک می‌کنند تا بهتر خطاهای پنهانی را شناسایی کنید. با وجود اینکه این زبان‌ها سخت‌گیرانه هستند، اما یادگیری و کار با آن‌ها بسیار ساده است، البته برای این کاملا با آن احساس راحتی داشته باشید، باید میزانی وقت بگذارید.

  • معایب

شما مجبور هستید که دو اپلیکیشن را درست کنید

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

برنامه‌نویسی در React Native

  • مزایا

یک پایه کد

همانطور که قبلا اشاره شد در React Native شما نیازی ندارید که دو اپلیکیشن جدا از همدیگر را توسعه دهید. بجای این‌کار کدهای پایه شما می‌توانند در هر دو پلتفرم مورد استفاده قرار گیرند. به نظر می‌آید که این یک مزیت خوب است که مجبور نیستید دو زبان متفاوت از همدیگر را برای توسعه اپلیکیشن‌های متفاوت یاد بگیرید، تنها کافی‌ست یک مورد را بدانید.

زمان

وقتی که از React Native استفاده می‌کنید، همواره برای ساختن یک اپلیکیشن ساده و انتشار آن در مارکت، سرعت بیشتری دارید و این به نسبت اپلیکیشن‌های Native به شما امکان تسریع در روند توسعه را می‌دهد. این موضوع براین اساس در نظر گرفته شده که شما تنها یک اپلیکیشن را برای دو کاربرد متفاوت ایجاد می‌کنید.

مفاهیم وب

برای یک توسعه‌دهنده وب، کار روی توسعه موبایل کمی سخت است. React Native از آنجایی که از جاوااسکریپت قدرت می‌گیرد، این انتقال یا تغییر روش را ساده‌تر می‌کند. بیشتر توسعه‌دهندگان وب مطمئنا با جاوااسکریپت کار کرده‌اند، به همین دلیل روند توسعه اپلیکیشن موبایل برای‌شان درک‌پذیر‌تر و ساده‌تر است.

بارگذاری مجدد سریع

وقتی مشغول توسعه یک اپلیکیشن در React Native هستید و یک فایل را ذخیره می‌کنید، تغییرات به سرعت در دستگاهی که اپلیکیشن روی آن قرار دارد اعمال می‌شود، این سرعت عملکرد در پاسخگویی به فییدبک‌ها یکی از موارد بسیار خوب است.

متن باز

React Native یک فریمورک متن‌باز است که به شما این اجازه را می‌دهد تا بتوانید کدها را بازرسی کنید. این موضوع برای درک بیشتر فریمورک بسیار مفید است، اما جدای از آن به شما کمک می‌کند تا بتوانید باگ‌ها را درست کنید و ویژگی‌های جدیدی را نیز به آن اضافه نمایید.

  • معایب

پشتیبانی نکردن از تمام APIها

React Native از تمام APIهای موجود برای اپلیکیشن‌های Native پشتیبانی نمی‌کند. این فریمورک APIهای لازم را پشتیبانی می‌کند اما گاهی ممکن است API یا کارکرد بخصوصی را که شما به نیاز دارید را پشتیبانی نکند. استفاده از این کارایی‌ها از طریق ماژول‌های محلی انجام می‌شود که در مورد پایینی مشاهده می‌کنیم.

ماژول‌های محلی

از آنجایی که تمام APIها و کارکردها در React Native قرار ندارد، به همین دلیل حالت ماژول‌های محلی ارائه شده است. این ماژول‌ها قسمت‌هایی هستند که در زبان Native نوشته شده اند و بعد از آن وارد کدهای React Native شده اند. به نظر راه حل مناسب و معقولی می‌آید، اما برای استفاده از این ماژول‌ها، توسعه‌دهنده نیاز دارد که از زبان‌های Native نیز درکی داشته باشد به همین دلیل است که برخی افراد از استفاده React Native خودداری می‌کنند. البته در کنار این، چنین ماژول‌هایی می‌تواند روی کدها نیز تاثیر بگذارد به این دلیل که ماژول‌های مربوط به Android با IOS متفاوت است.

کتاب‌خانه‌های دیگر

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

تاثیر از دیگر اپلیکیشن‌های Native

وقتی قصد دارید به اپلیکیشن‌های محلی دیگری مانند دوربین پلتفرم دسترسی داشته باشید این کار از طریق محیط‌های توسعه Native خیلی ساده‌تر انجام می‌شود. React Native در برخی حالت‌ها از این وضعیت پشتیبانی نمی‌کند به همین دلیل شما را مجبور می‌کند که از دیگر فریمورک‌ها یا ماژول‌های Native استفاده کنید.

طراحی

آندروید و IOS طراحی و ظاهر متفاوتی دارند که هر کدام برای خود دارای راهنما و شیوه‌های متفاوتی هستند. المان‌های گرافیکی در React Native در پلتفرم‌های مختلف تبدیل می‌شود اما این جایگزین کردن‌ها در برخی مواقع ممکن است بی‌ثبات باشد. به همین دلیل بسیاری از اوقات نیاز دارید که شیوه‌های متفاوتی را برای کار کردن با المان‌های طراحی در بر بگیرید.

جنبه‌های بلند مدت

همواره یک شک از نگرانی برای پشتیبانی بلند مدت از React Native وجود دارد. فیسبوک هر روز می‌تواند تصمیم بگیرد که دیگر از این فریمورک پشتیبانی نکند، این حالت وضعیت را برای انتخاب سخت می‌کند.

چگونه من به تصمیم رسیدم؟


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

این مطلب را از دست ندید