Kotlin Multiplatform یک بار کدنویسی، اجرا در همه پلتفرمها!

Coding with Mitch Kotlin Multiplatform Mobile آموزش کوتلین، پلتفرم چند

با توجه به این که کاتلین به این هدف‌ها کامپایل می‌شود، می‌توانیم کد کاتلین را یک بار بنویسیم و آن کد را برای هدف خاصی که نیاز داریم کامپایل کنیم و خروجی صحیحی برای استفاده روی پلتفرم مقصد به دست آوریم. انتخاب نرم‌افزار مناسب برای نوشتن کد کاتلین به نیازها و ترجیحات شما بستگی دارد. اگر به دنبال یک IDE قدرتمند با طیف گسترده‌ای از ابزارها هستید، IntelliJ IDEA یا Android Studio گزینه‌های مناسبی هستند. اگر به دنبال یک ویرایشگر کد ساده و سبک هستید، Visual Studio Code گزینه مناسبی است. یکی از دلایلی که باعث می‌شود تا یک زبان برنامه‌نویسی همه‌گیر شود، جامعه آماری یا کامیونیتی پرجمعیت است.

این اپلیکیشن دارای یک ارائه‌دهنده نرخ ارز است و نرخ‌ها را از منابع داده‌ای مانند یک سرور، پایگاه داده یا در این مثال از یک منبع ساختگی با مقادیر هارد کد شده می‌گیرد. زمانی که لازم است تبدیل انجام شود، اپلیکیشن از محاسبه‌گر نرخ برای یافتن مسیر تبدیل بین دو ارز استفاده می‌کند. این اپلیکیشن به نام Kotlin multiplatform را با OnWorks به صورت آنلاین دانلود و اجرا کنید. مراحل ساده ایجاد اولین پروژه Kotlin Multiplatform Mobile را دنبال کنید. مشابه React Native ، مزیت خوبی برای استفاده مجدد از کدهای موجود به توسعه دهندگان می دهد که باعث صرفه جویی زیادی در وقت و انرژی می شود.

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

هدف اصلی کاهش تکرار کد و افزایش بهره‌وری با به اشتراک گذاشتن منطق تجاری در چندین پلتفرم است، در حالی که همچنان انعطاف‌پذیری برای پیاده‌سازی‌های پلتفرم خاص در صورت نیاز فراهم می‌کند. Summarize this content to 400 words in Persian Langپس از الهام گرفتن از KotlinConf، تصمیم گرفتم برای اولین بار Kotlin Multiplatform (KMP) را امتحان کنم و یک اپلیکیشن با این فناوری بسازم. Kotlin Multiplatform شامل ابزارها و کتابخانه هایی برای ساخت، آزمایش و استقرار پروژه های چند پلتفرمی است. همچنین قابلیت همکاری با سایر زبان‌های برنامه‌نویسی مانند سوئیفت و جاوا اسکریپت را فراهم می‌کند. به طور کلی، Kotlin Multiplatform ابزاری قدرتمند برای توسعه دهندگانی است که می خواهند یک بار کد بنویسند.

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

پس از گذشت چندین دهه از ظهور زبان‌های برنامه‌نویسی مختلف، کاتلین به عنوان یک زبان برنامه‌نویسی جدید و متفاوت به صحنه وارد شده است. اما زبان برنامه نویسی کاتلین چیست؟ کاتلین، یک زبان برنامه‌نویسی مدرن و قدرتمند است که توسط شرکت JetBrains توسعه یافته است. هدف اصلی کاتلین، ارائه یک زبان ساده، قابل فهم و بهره‌ور برای توسعه‌دهندگان است. کاتلین، به عنوان جایگزینی برای زبان جاوا، امکانات مدرنی را در اختیار برنامه‌نویسان قرار می‌دهد و در عین حال سازگاری کامل با زبان جاوا را حفظ می‌کند. Kotlin Multiplatform امکان اشتراک کد را بین پلتفرم‌های مختلف فراهم می‌سازد. تفاوت کلیدی آن با دیگر ابزارهای چند پلتفرمی ‌این است که همه کدها را به صورت کد خاص پلتفرم کامپایل نمی‌کند.

این قابلیت به وسیله کتابخانه استاندارد کاتلین (+) برای نوشتن ماژول و سپس کامپایل کردن کد به پلتفرم‌های مقصد مختلف مانند JVM ،JS و Native فراهم شده است. این بدان معنی است که Kotlin/JVM یا هر کد جاوا یا جاوا اسکریپت دیگر نمی‌تواند برای نوشتن کد مشترک مورد استفاده قرار گیرد. دسترسی به API پلتفرم با استفاده از مکانیسم expect/actual (+) انجام می‌شود. در سال‌های اخیر بحث تکنولوژی‌های توسعه کراس پلتفرم اپلیکیشن‌های موبایل بسیار داغ شده است. همانطور که احتمالا هم می‌دانید، فلاتر (Flutter) از گوگل و React Native از متا، توانسته‌اند موفقیت چشمگیری در توسعه اپلیکیشن‌های موبایل بدست آورند. اگر شما هم به توسعه اپلیکیشن‌های موبایل علاقه داشته باشید، حتما به یادگیری فلاتر یا یادگیری React Native فکر کرده‌اید و یا در حال یادگیری یکی از این تکنولوژی‌ها هستید.

به جای آن کنترل کاملی روی آن چه که به اشتراک گذاشته خواهد شد و آن چه که native خواهد بود به دست می‌آوریم. به طور کلی عموماً منطق تجاری به اشتراک درمی‌آید و UI به صورت native پلتفرم عرضه می‌شود تا تجربه کاربری طبیعی‌تری به دست آید. بدین ترتیب می‌توانیم از مزیت نوشتن اپلیکیشن‌های چند پلتفرمی بهره‌مند شویم و همزمان از محدودیت‌هایی که معمولاً در این مسیر وجود دارد، مانند فقدان انعطاف‌پذیری در نوشتن کد خاص پلتفرم نیز اجتناب کنیم. توسعه اپلیکیشن‌های موبایل یکی از چالش‌های اصلی برنامه‌نویسان است، زیرا نیازمند توسعه جداگانه برای پلتفرم‌های اندروید و iOS است. هر یک از این پلتفرم‌ها دارای زبان‌ها و ابزارهای توسعه خاص خود هستند.

این لایه می‌تواند شامل هر چیزی باشد که با داده‌ها کار می‌کند. لایه Data جایی است که داده‌ها را برای اپلیکیشن خود دریافت و یا ذخیره می‌کنیم. برای این که این مقاله ساده بماند، داده‌ها را از منبع ریموت دریافت می‌کنیم. اکنون می‌توانید از saveValueLocally استفاده کنید تا کاتلین بداند که باید روی اندروید از NSUserDefaults و روی iOS از SharedPreferences استفاده کند. این کار را می‌توان در مورد هر چیزی که در پلتفرم‌های مختلف، متفاوت است، مانند Data اجرا کرد.

در کدایت، به تولید محتوای آموزشی در مورد برنامه نویسی اندروید و وب می پردازیم. هدف من از ایجاد این وبسایت، کمک به سایر برنامه نویسان اندرویدی برای یادگیری و پیشرفت در این زمینه است. کاتلین و جاوا دو زبان برنامه‌نویسی محبوب برای توسعه اندروید هستند. هر دو زبان مزایا و معایب خاص خود را دارند که در ادامه به بررسی آنها می پردازیم. کاتلین یک زبان برنامه نویسی نسبتاً جدید است، اما به سرعت در حال محبوبیت gaining popularity است. گوگل کاتلین را به عنوان زبان رسمی توسعه اندروید معرفی کرده است و بسیاری از شرکت های بزرگ دیگر مانند Netflix، Uber و Airbnb از کاتلین برای توسعه برنامه های خود استفاده می کنند.

به عنوان راه‌حل می‌توان یک ماژول ios-configuration module جدید اضافه کرد تا وابستگی‌های iOS در آن قرار گیرند. به جای آن می‌توانیم شروع به ایجاد کامپوننت‌های مختلف، مستقل از همدیگر بکنیم و مجموعه کارکردهای کاملاً متمرکزی ارائه کنیم. در این حالت، اپلیکیشن‌های کلاینت کنترل کاملی روی مواردی که به آن وابسته هستند و استفاده می‌کنند خواهند داشت. خوشبختانه استفاده از کد اشتراکی در اندروید کاملاً آسان است، زیرا یک پروژه Gradle نیز محسوب می‌شود. کافی است آن را به عنوان یک وابستگی در پیکربندی Gradle پروژه اندروید اضافه کنید. «تابع‌های تعلیقی» (Suspending functions) به ObjC کامپایل نمی‌شوند و از این رو نمی‌توانیم از آن‌ها روی iOS بهره بگیریم، اما به لطف CFlow از KotlinConf می‌توانیم این کار را انجام دهیم.

در این بخش شما نام پروژه خود را بنویسید minimum SDK مکان ذخیره پروژه و Package name خود را انتخاب کنید. در مرحله اول ، من می خواهم توضیح دهم کهmultiplatform  چیست ، مزایای آن و نحوه پیاده سازی آن در پایگاه کد شماست. تمام مقالات #کاتلین_مولتی_پتلفرم_موبایل را در اینجا ببینید.

سرانجام Kotlin پس از اعلام پشتیبانی گوگل در سال 2017 در معرض دید عموم قرار گرفت. جدیدترین نظرسنجی StackOverflow در سال 2020 نشان میدهد که 62٪ از توسعه دهندگان نظرسنجی Kotlin را دوست دارند. در این مقاله از کاتلین چند پلتفرمی استفاده کردیم تا کد را بین اندروید و iOS به اشتراک بگذاریم. همچنین از کتابخانه‌های چند پلتفرمی مانند Ktor fvhd networking Serialization برای تجزیه JSON و از کوروتین‌ها برای وظایف ناهمگام بهره گرفتیم. Kotlin Multiplatform بسیار نویدبخش است و با ارائه نسخه 1.4 کاتلین انتظار می‌رود شاهد عرضه موارد جدیدی از این فناوری باشیم.

این قابلیت، با وجود چالش‌های موجود، می‌تواند به صرفه‌جویی در زمان و هزینه‌ها کمک کند و توسعه اپلیکیشن‌های مقیاس‌پذیر و کارآمد را تسهیل کند. این اعلامیه Google غیرمنتظره نبود چون دقیقا دو سال قبل، این شرکت پشتیبانی درجه یک خود را از Kotlin اعلام کرد و با این اعلامیه زبان مورد علاقه توسعه برنامه های اندروید یعنی جاوا را سرنگون کرد! اگرچه Kotlin در ابتدا روی اندروید متمرکز شده است، اما قصد دارد به عنوان یک زبان cross-platform، برای چندین سیستم عامل به عنوان مثال iOS نیز جای خود را باز کند. اما بیایید نگاه کوتاهی به Kotlin و دلایل محبوبیت فزاینده آن بیندازیم. هنوز هیچ IDE منفردی ارائه نشده است که در آن بتوان یک اپلیکیشن چند پلتفرمی مورد پشتیبانی Kotlin Multiplatform نوشت. بنابراین در این مسیر باید به صورت مداوم از IDEA به اندروید استودیو، به Xcode و غیره جابجا شوید.

Kotlin Multiplatform Mobile به شما امکان می دهد از یک codebase برای businesslogic برنامه های iOS و Android استفاده کنید. اشتراک کد بین سیستم عامل های تلفن همراه یکی از موارد مهم استفاده از Multiplatform کاتلین است. با استفاده از Kotlin Multiplatform Mobile (KMM) می توانید کدهای مشترک برنامه های multiplatform مانند businesslogic، connectivity و موارد دیگر را بین Android و iOS ایجاد کنید. در حال حاضر gradle هیچ پشتیبانی برای ساخت پروژه‌های iOS ندارد و از این رو راه‌اندازی یک فریمورک خودکار برای پیوند دادن به پروژه iOS به خصوص در مورد ماژول‌های چندگانه مشترک نیاز به اندکی تلاش دارد. این مانعی است که باید از سر راه برداریم و این کار نیز بی‌فایده نیست، زیرا امکان تغییر ماژول‌های مشترک برای ایمپورت خودکار در پروژه‌های iOS را فراهم می‌سازد.

پیکربندی gradle برای ماژول‌های مشترک چندان سرراست نیست و برخی بخش‌ها باید به صورت دستی انجام شود. عیب بزرگ‌تر این است که Kotlin Multiplatform هنوز یک محصول تمام نشده محسوب نمی‌شود و تا آن زمان می‌توان تصور کرد که issue-های build دیگری در نسخه‌های بعدی ظاهر شوند. با این حال بررسی آن جهت آماده شدن برای آینده در حالت آزمایشی ارزشش را دارد. در این مقاله اقدام به ماژول‌بندی پروژه چند پلتفرمی کاتلین به صورت یک مبدل ارزی برای iOS و اندروید می‌کنیم که دارای چند ماژول مشترک است. توجه کنید که پروژه‌های چند پلتفرمی کاتلین در کاتلین 1.2 و 1.3 هنوز در مرحله آزمایشی قرار دارند و خالی از اشکال نیستند. بدین ترتیب آن چه ارائه خواهد شد و همچنین ورودی‌ها و تعامل‌های کاربر مدیریت می‌شوند.

معماری خاصی که در این مثال دنبال می‌کنیم، «معماری شش‌گوشه» (Hexagonal architecture) نام دارد که گاهی به صورت «پورت و آداپتر» نیز نامیده می‌شود. معماری شش‌گوشه با قرار دادن ورودی‌ها و خروجی در لبه طراحی، منطق اصلی اپلیکیشن را از دغدغه‌های بیرونی جدا می‌کند. بدین ترتیب می‌توانیم به سادگی پیاده‌سازی آن‌ها را بدون تغییر دادن منطق مرکزی تغییر دهیم. KMM یک SDK برای توسعه اپلیکیشن‌های موبایل بصورت کراس پلتفرم است. به کمک KMM می‌توانید اپلیکیشن‌های موبایل را برای اندروید و آی او اس (iOS) به صورت همزمان توسعه دهید. در واقع با اشتراک گذاری منطق (Shared Code) بین پلتفرم اندروید و iOS درصد بالایی از کد را به صورت مشترک بین هر دو پلتفرم استفاده می‌کنید.

بدین ترتیب کلاس می‌تواند از JSON و به آن serialize و deserialize شود. بنابراین باید برای اندروید و iOS به صورت جداگانه لایه‌های صفحات را طراحی کرد و سپس ادامه کار با نوشتن کد‌های کاتلین برای هر ماژول انجام می‌گیرد. در پروژه‌های KMM یک ماژول به نام Shared Code وجود دارد که کد‌های مشترک (مانند مدل‌ها، کلاس‌ها و دیتا کلاس‌ها) هر دو سیستم عامل در این قسمت قرار می‌گیرند. سپس برای هر کدام از اپلیکیشن‌های اندروید و iOS یک ماژول به همین نام‌ها وجود دارد که باید کد‌های نیتیو را در آنجا نوشت. Wine راهی برای اجرای نرم افزار ویندوز بر روی لینوکس است، اما بدون نیاز به ویندوز.

اما با استفاده از Kotlin Multiplatform، امکان نوشتن کد مشترک و توسعه همزمان برای هر دو پلتفرم فراهم می‌شود. این قابلیت می‌تواند زمان و هزینه‌های توسعه را به شدت کاهش دهد. KMM یک SDK برای توسعه اپلیکیشن‌های موبایل به صورت کراس پلتفرم (توسعه همزمان برای اندروید و iOS) است که این امکان را به شما می‌دهد که اپلیکیشن‌های 100% بومی (Native) توسعه دهید. این تکنولوژی امکان اشتراک کد بین هر دو سیستم عامل Android و iOS را فراهم می‌کند. بنابراین به کمک قابلیت‌های این زبان مدرن، می‌توانید با سرعت بیشتر و در زمان کمتری اپلیکیشن‌های نیتیو (بومی) بسازید.

اپلیکیشن مبدل ارز که در این مقاله بررسی می‌کنیم، یک نرخ مبادله از/به بر اساس جفت ارز وارد شده ارائه می‌کند. در اولین صفحه Android studio "شروع یک پروژه جدید Android Studio" را انتخاب کنید. زمانی که مبدل را می‌سازیم، لازم است که کلاینت‌ها یک پیاده‌سازی ExchangeRateProvider را نصب کنند تا کاملاً عملیاتی شود. برای مشاهده کد منبع این مثال به این ریپوی گیت‌هاب (+) مراجعه کنید. مدخل اصلی برای استفاده از مبدل کامپوننتی به نام CurrencyConverter است. این مبدل به صورت درونی از ExchangeRateProvider استفاده می‌کند که داده‌های نرخ مبادله را واکشی می‌کند و در ادامه کامپوننت RateCalculator عمل تبدیل را اجرا می‌نماید.

کاتلین همچنین می‌تواند به JavaScript یا کد ماشین کامپایل شود. این زبان برنامه نویسی به دلیل ویژگی‌های برجسته‌ای مانند خوانایی بالا، انعطاف‌پذیری، امنیت، و قابلیت همکاری با کد جاوا، به سرعت جایگزین برنامه‌نویسی با جاوا شده است. با توجه به این که انتظارات و نیازهای مشتریان بطور مداوم در حال تکامل است پس خیلی هم دور از ذهن نیست که فناوری هم مدام در حال بروز شدن باشد. در ماه می 2019، گوگل اعلام کرد که اکنون Kotlin زبان برنامه نویسی ارجح برای توسعه دهندگان برنامه های اندروید است. در واقع، Kotlin به کد کمتری احتیاج دارد که هم از نظر تایپ هم آزمایش و هم نگهداری کار را بسیار ساده تر می‌کند. بلوک plugins اعلام می‌کند که این یک کتابخانه اندروید و یک پروژه چند پلتفرمی است.

از کاتلین برای هر نوع توسعه نرم افزار می توان استفاده کرد، از برنامه نویسی سمت سرور و سمت کلاینت گرفته تا Android و iOS. این زبان برای اجرا از ماشین مجازی جاوا JVM بهره میگیرد که اشتراک کد را بین سیستم عامل های مختلف امکان پذیر می کند. تقسیم کد مشترک به ماژول‌های چندگانه که هر یک مقصود خاصی دارند موجب می‌شود کامپوننت‌هایی ایجاد شوند که دامنه محدودی دارند و خوانایی، پایداری و قابلیت نگهداری آن‌ها بیشتر است. بدین ترتیب اپلیکیشن‌های کلاینت می‌توانند از آن چه نیاز دارند استفاده کنند و پیکربندی‌های خاص خود را برگزینند که با پلتفرم آن‌ها سازگاری بیشتری دارد. مزیت‌های این طراحی نسبت به داشتن یک ماژول مشترک چندمنظوره ارزش بررسی کردنش را دارد.

بدین ترتیب Ktor شیوه تجزیه یک آیتم را از یک رشته JSON می‌داند. پس از این که این موارد را راه‌اندازی کردیم، اینک صرفاً می‌توانیم از کلاینت استفاده و درخواست‌هایی مانند client.get، client.post و غیره از طریق آن اجرا کنیم. هم اکنون می‌توانیم از این کد در هر دو پلتفرم اندروید و iOS بهره بگیریم. CommonMain جایی است که کد اشتراکی را قرار می‌دهیم و androidMain و iosMain جایی است که کد پلتفرم در صورت نیاز در آن جای می‌گیرد. فریمورک‌های موجود که برشمردیم همگی خوب هستند، شکی نیست که کارشان را به خوبی انجام می‌دهند اما با این حل شما را ملزم می‌سازند که همه کدهای موجود را بازنویسی کرده و به دنیای آن‌ها ببرید.


برنامه نویسی پایگاه داده