Kotlin Multiplatform چیست و چگونه کار می کند؟

Kotlin Multiplatform چیست؟(KMP)Kotlin Multiplatform بر خلاف تصور برنامه نویسان یک framework نیست بلکه SDK است که از توسعه اپلیکیشن های cross-platform پشتیبانی می کند و به توسعه دهندگان اجازه می دهد business logic مشابهی را برای چندین پلتفرم بنویسند. همچنین Multiplatform Kotlin امکان توسعه اپلیکیشن بر روی پلتفرم های دیگر مانند لینوکس، ویندوز و اپلیکیشن های وب را فراهم می کند.علاوه بر KMP ما در این زمینه با مفهمومی دیگر یعنی Kotlin Multiplatform Mobile (KMM) سروکار داریم که زیر مجموعه ای از KMP است. KMM با تیم متمرکز خود در JetBrains از پایگاه کد KMP ساخته شده است و به توسعه دهندگان این امکان را می دهد business logic را برای iOS و Android از یک پایگاه کد کاتلین واحد کدنویسی کنند. بنابراین می توان نتیجه گرفت که KMM و KMP پروژه یا فناوری های جداگانه ای از هم نیستند و به یکدیگر وابسته اند.ویژگی های KMP:مزیت اساسی KMP این است که توسعه دهندگان می توانند با یک بار کد نویسی آن را روی چندین نوع دستگاه اجرا کنند.در اینجا برخی از ویژگی های منحصر به فرد KMP آورده شده است: KMP اشتراک گذاری کد را برای موبایل و همچنین دسکتاپ فراهم می کند. در صورت استفاده از business logic یکسان، می توان یک پایگاه کد را برای اندروید، iOS، دسکتاپ یا حتی اپلیکیشن وب به اشتراک گذاشت اگر برنامه ریزی مناسبی داشته باشید، زمان توسعه را می توان به 30 تا 40 درصد برای iOS کاهش داد، جایی که آنها فقط باید لایه UI را برای آن بنویسند. اصلاح سریع و آسان کد را فراهم می کند. توسعه دهندگان می توانند API مشترک خود را برای برخی از عملکردهای خاص پلتفرم به راحتی ایجاد کنند.نقش کاتلین در Kotlin Multiplatform:کاتلین یکی از پیشرفته‌ترین و مدرن‌ترین زبان‌های این دوره است که به دلیل ویژگی‌های بسیار زیاد آن در میان توسعه دهندگان محبوب شده است. بعد از اینکه که گوگل کاتلین را به عنوان زبان رسمی توسعه اندروید معرفی کرد spring boot با پشتیبانی کاتلین این زبان را به سطح بالاتری از شهرت رساند.KMM به شدت به کاتلین وابسته است زیرا بسیاری از بخش‌های معماری KMM از کتابخانه‌های کاتلین استفاده می‌کند که مستقل از پلتفرم هستند. به عنوان مثال برای شبکه‌سازی، از Ktor استفاده می‌شود و بین پلتفرم‌ها به اشتراک گذاشته می‌شود تا آن را به طور معمول برای همه پلتفرم‌ها در دسترس قرار دهد، بنابراین لازم نیست نگران استفاده هر پلتفرم از کتابخانه خودش و تکرار همه مدل‌سازی‌ها مرتبط با شبکه در همه پلتفرم‌ها باشید زیرا با کاتلین این کار راحت شده است.Kotlin Multiplatform چه تفاوتی با Flutter و React Native دارد؟KMP به عنوان یک جایگزین مستقیم برای Flutter یا React Native عمل نمی کند بلکه توسعه بومی را تکمیل می کند و به لطف کاهش هزینه های توسعه و نگهداری، آن را جذاب تر می کند. امروزه، تنوع زیادی از framework ‌های چند پلتفرمی، از جمله Flutter، React Native و البته Kotlin Multiplatform Mobile (KMP) وجود دارد که هرکدام مزایا و معایب خود را دارد و هیچ کدام بی عیب نیستند. بنابراین می توان گفت انتخاب بین KMP، Flutterو React Native به پروژه ای که در دست دارید بستگی دارد.چرا KMM یک راه حل بین پلتفرمی واقعی و کاربردی است؟پشتیبانی از برنامه نویسی چند پلتفرمی یکی از مزایای کلیدی کاتلین است و زمان صرف شده برای نوشتن و حفظ یک کد برای پلتفرم های مختلف را کاهش می دهد همچنین در عین انعطاف پذیری می تواند مزایای برنامه نویسی بومی را حفظ می کند.چگونه KMM توسعه اپلیکیشن کارآمد و ارزان‌ را امکان‌پذیر می‌کند؟صرفه جویی 30 تا 50 درصدی در زمان توسعه با استفاده از Kotlin Multiplatform برای توسعه موبایل و وب کاملاً امکان پذیر است. در مقایسه با جاوا، کاتلین می تواند 40 درصد از خطوط کد را ذخیره کند و علاوه بر این، از آنجایی که برنامه‌های اندروید و iOS از خطوط کد مشابهی برای business logic استفاده می‌کنند، معرفی و تست ویژگی‌های اضافی آسان‌تر و سریع‌تر است.در نتیجه، به لطف کاتلین می‌توانید هزینه توسعه اپلیکیشن را کاهش دهید، زیرا نیازی به ایجاد تیم‌های کامل برای هر پلتفرم یا پرداخت هزینه به توسعه‌دهندگان برای نوشتن چندین خط کد مشابه ندارید.KMM چگونه کار می کند؟همانطور که قبل تر اشاره کردیم قابلیت چند پلتفرمی با زبان کاتلین امکان پذیر شده است. این بدان معنی است که با نوشتن یک پایگاه کد کاتلین می توانیم پلتفرم هایی مانند JVM، JavaScript و Native/Desktop را هدف قرار دهیم. برای این کار KMM SDK از نسخه‌های مخصوص هر پلتفرم بومی کاتلین مانندKotlin/JVM Kotlin/JS یا Kotlin/Native استفاده می‌کند تا کد کاتلین ما را به پلتفرم مدنظرمان کامپایل کند.باتوجه به این اینکه ما در این مقاله توسعه اپلیکیشن اندروید و ios مدنظرمان است در ادامه به بررسی نحوه کامپایل KMM اندروید و ios می پردازیم.همانطور که در تصویر زیر مشاهده می کنید زمانی که کد مشترک را در کاتلین نوشتیم KMM برای اجرا شدن اندروید کد کاتلین را به JVM bitecode کامپایل می کند تا برای ما اجرا شود اما KMM برای اجرا شدن ios، از یک زیرساخت کامپایلر به نام LLVM استفاده می کند تا کد کاتلین ما را به LLVM bitecode کامپایل کند و می توان گفت این کامپایلر فرایند تبدیل Kotlin به Swift را برای پروژه ما انجام می دهد.سوالی که ممکن است با دیدن شکل بالا برای شما پیش بیاید این است Kotlin/Native یا Native/Desktop چیست؟Kotlin/Native یک پشتیبان LLVM برای کامپایلر Kotlin، پیاده سازی زمان اجرا و تسهیلات تولید کد بومی با استفاده از زنجیره ابزار LLVM است.Kotlin/Native اصلی‌ترین هدف آن این است که کد را برای پلتفرم‌هایی که نمی توانند از ماشین‌های مجازی (مثل JVM در Java) استفاده کنند (مانند iOS یا اهداف جانبی) را کامپایل کند.ساختار پروژه KMM در محیط Android Studioبرای ساخت یک اپلیکیشن KMM نیاز است ابتدا در Android Studio یک پروژه جدید ایجاد کنیم. بعد از ایجاد پروژه در محیط Android Studio برای اپلیکیشن ما سه ماژول AndroidApp، iOSApp و shared را تولید می کند.ماژول sharedماژول های AndroidApp و iOSApp ساده هستند. اینها ماژول هایی هستند که در آنها کد برنامه مخصوص پلتفرم نوشته می شود، همان چیزی که برای یک برنامه بومی Android یا iOS می نویسید. با این حال، ماژول shared بین پلتفرم‌ها به اشتراک گذاشته می‌شود و کد کاتلین کراس پلتفرم در باینری‌های خاص همانطور که در بالا نشان داده شده است کامپایل می‌شود.تصویر زیر یک اپلیکیشن Hello World ساده را برای پروژه KMM نشان می دهد، که هر پلتفرم پیغام شخصی سازی شده خود را نمایش می دهد. این منطق در (کد shared) نهفته است و بخش UI جزئیات خاصی از این مقدار را نمی داند.همانطور که در تصویر بالا مشاهده می کنید کلاس Platform که داخل ماژول shared قرار دارد با کد UI برای اندروید و iOS قابل دسترس است. همچنین به کلیدواژه های expect و actual که در Kotlin multiplatform جدید معرفی شده است توجه داشته باشید.کلاس‌هایی که با کلمه کلیدی expect علامت‌گذاری شده‌اند نشان می‌دهند که KMM انتظار دارد یک مقدار یا پیاده‌سازی خاص پلتفرم برای این نماد انجام شود. KMMبرای یک کلاس، کلاس دیگری با همان نام را انتظار دارد که با کلمه کلیدی actual مشخص شده باشد همچنین برای یک متغیر، متغیر دیگری را با مقداری در کلاس actual دیگر انتظار دارد. برای بهتر متوجه شدن این موضوع تصویر بالا را به دقت بررسی کنید.این پیاده‌سازی actual باید در هر دو پلتفرم iOS و Android برای کامپایل ماژول ایجاد شود و اگر کد مخصوص پلتفرم مورد نیاز نباشد، کد در ماژول shared پیاده سازی می شود.اجرای پروژه KMMKMM اپلیکیشن های خود را به همان روش پروژه های بومی اندروید یا iOS اجرا می کند. از Android Studio برای اجرای برنامه در شبیه ساز اندروید و از XCode برای اجرای برنامه iOS در شبیه ساز iOS استفاده کنید.آیا انتقال پروژه های کنونی به KMM وجود دارد؟بله، امکان انتقال پروژه های بومی موجود به KMM وجود دارد. business logic موجود از کد اندروید با Kotlin در یک کتابخانه جداگانه استخراج می شود و برای اشتراک گذاری با برنامه iOS استفاده می شود.اگر پروژه موجود به خوبی طراحی شده باشد و به طور ضعیفی با هم پیوند خورده باشد، برای استخراج business logic از یک برنامه یکپارچه، تنها به حداقل تلاش نیاز است.نمونه هایی از اپلیکیشن های ساخته شده با KMMدر اینجا چند برنامه ساخته شده در KMM وجود دارد که نشان می دهد کسب و کارها شروع به کشف مزایای این فناوری کرده اند.اپلیکیشن PlanGrid: یک برنامه مدیریت ساخت و ساز که به کاربران امکان ایجاد، مشاهده، ویرایش و توزیع انواع اسناد مورد نیاز در سایت های ساخت و ساز را می دهد.اپلیکیشن Memrise: برنامه ای برای یادگیری زبان که از میم ها، فیلم ها و تصاویر به عنوان ابزاری برای تسهیل روند آموزش استفاده می کند. اپلیکیشن Cash App: این اپلیکیشن به کاربران امکان خرج ، دریافت و سرمایه گذاری پول را می دهد. اپلیکیشن Netflix: بزرگترین شرکت خدمات پخش ویدئو.اپلیکیشن VMware: برنامه های زیادی در مجموعه خود دارد. برخی از آنها بخشی از Workspace ONE هستند، یک پلتفرم دیجیتال که مدیریت و ارائه برنامه های کاربردی را در چندین دستگاه به طور ایمن تسهیل می کند.نتیجه گیریKotlin Multiplatform Mobile یک کیت توسعه نرم افزار عالی است که بسیاری از مشکلات موجود در اکوسیستم توسعه موبایل را حل می کند همچنین می توان گفت اشتراک‌گذاری کد بین پلتفرم‌ها از نظر منابع با KMM کارآمدتر می‌شود و KMM امکان کنترل کامل فناوری‌های پلتفرم های موجود در Android و iOS را بدون اینکه در یک framework کراس پلتفرم یا hybrid گرفتار شوید به شما می‌دهد.بنابراین اگر می‌خواهید اپلیکیشنی توسعه دهید که به شدت به APIهای سطح پایین متکی است یا می خواهید اپلیکیشن های سنگین خود را در همه پلتفرم‌ها تکرار کنید، بهتر است به KMM نگاه ویژه ای داشته باشید.بقیه آموزش های mister developer را می توانید در تلگرام و اینستاگرام دنبال کنید!!کانال تلگرام: mister_developerrاینستاگرام: mister_developerrامیدوارم این آموزش برای شما مفید بوده باشد.موفق و پیروز باشیدمنابع: https://amitshekhar.me/blog/how-does-the-kotlin-multiplatform-work https://medium.com/globant/kotlin-multiplatform-mobile-kmm-code-sharing-between-android-and-ios-9a9af66e2655 https://dev.to/anioutkajarkova/kotlin-multiplatform-practical-multithreading-part-1-4357 https://www.netguru.com/services/kotlin-multiplatform#:~:text=Kotlin%20Multiplatform%20(KMM)%20is%20a,logic%20between%20all%20the%20platforms. https://www.mongodb.com/developer/products/realm/getting-started-kmm-flexiable-sync/ https://medium.com/vmware-end-user-computing/kmm-vs-kmp-whats-the-deal-dd64bc5d61f2