کوروتین چیست؟ آموزش جامع coroutine
کوروتین (coroutine) در اندروید یک کتابخانه و فریمورک برنامهنویسی ناهمزمان در Kotlin برای پلتفرم اندروید است. با استفاده از کوروتین (coroutine)، میتوانید کدهای غیرهمزمان را بدون بلاک شدن و فریز شدن نوشته و اجرا کنید. این کتابخانه به شما ابزارها و ساختارهایی میدهد که برنامهنویسی ناهمزمان را آسانتر میکنند.
“ما را در اینستاگرام دنبال کنید”
در این مقاله از سری مقالات کاتلین می خواهیم شما را با آموزش جامع کوروتین (coroutine) آشنا کنیم و مزایا و معایب آن را مورد بررسی قرار دهیم. پس با سایت ترولرن همراه باش.
“قبل از شروع مقاله، بگم که بعد از مطالعه این مطلب، از آموزش پروژه محور برنامه نویسی اندروید سایتمون یعنی دوره ژنرال اندروید غافل نشید.”
توی دوره ژنرال صفر تا صد کوروتین (coroutine) رو در یک فصل کامل توضیح دادیم و همچنین توی پروژه های دیجی کالا و اسنپ فود به صورت عملی و پروژه محور از کروتینز استفاده کردیم و بطور کامل اون رو آموزش دادیم.
مقدمه
کوروتین (coroutine) در Kotlin یک ویژگی زبان است که به شما امکان میدهد کدهای ناهمزمان را به صورت متوالی و ساختارمندتر بنویسید. این ویژگی به شما راهی را برای انجام وظایف به صورت ناهمزمان و بدون نیاز به callback یا threading صریح ارائه میدهد، که در برنامهنویسی بسیار مهم است.
با استفاده از کوروتین (coroutine) Kotlin، میتوانید کد ناهمزمان را به شکلی مشابه کدهای متوالی معمولی بنویسید که رفتار آن آسانتر و درک و نگهداری آن آسانتر میشود. شما میتوانید Coroutine ها را با اجزای مختلف Android مانند Activities، Fragments و ViewModels استفاده کنید تا عملیات همزمان و ناهمزمان را به روشی کارآمدتر و مختصرتر انجام دهید.
با استفاده از کروتینز، نیازی به نگرانی درباره تردها و نخهای سیستم عامل اندروید ندارید، زیرا کروتینز به صورت خودکار و بهترین شکل ممکن مدیریت آنها را بر عهده میگیرند.
کوروتین (coroutine) چیست؟
کوروتین (coroutine) در اندروید از طریق کتابخانهای به نام Kotlin Coroutines معرفی شدهاند. این کتابخانه به برنامهنویسان امکان استفاده از برنامهنویسی همروند را با استفاده از اصول ساده و قدرتمند زبان Kotlin فراهم میکند.
یک coroutine در واقع الگوی برنامهنویسیای است که به شما امکان میدهد کدهای همروند را به صورت سادهتر و قابل فهمتری نوشته و اجرا کنید.
به عنوان مثال، شما میتوانید عملیات پشت صحنه را در یک coroutine اجرا کنید و منتظر پاسخ آن نباشید تا برنامه شما قفل نشود. همچنین، میتوانید از coroutines برای اجرای عملیات مربوط به واسط کاربری (UI) در نخ اصلی بدون توقف استفاده کنید.
استفاده از کوروتین (coroutine) در اندروید به شما امکان میدهد به صورت آسینکرون عمل کنید و از callback ها و threading های پیچیده فاصله بگیرید. با استفاده از این الگو، میتوانید برنامههای همروند و قابل تعمیم بنویسید که عملکرد بهتری داشته و بهبودهای قابل توجهی در عملکرد و پاسخگویی برنامه ایجاد کنند.
مزایای کوروتین (coroutine) در اندروید
کوروتین (coroutine) در زبان Kotlin به شما امکان میدهد از قابلیتهای برنامهنویسی همروند بهره ببرید و کدهای همروند را به صورت ساده و قابل فهم تر بنویسید. در ادامه به برخی از مزایای استفاده از کوروتین (coroutine) در اندروید میپردازم:
1. سادگی و خوانایی بالا
استفاده از کوروتین (coroutine) باعث میشود کدهای همروند شما سادهتر و قابل فهمتر باشند. شما میتوانید کدهای همروند را به صورت شبیه به کدهای متوالی نوشته و قابلیت خوانایی و نگهداری بالاتری را به آنها بدهید.
2. کاهش بسته شدن (blocking)
با استفاده از کروتین (coroutine) ، میتوانید از بسته شدن (blocking) نخ اصلی برنامه جلوگیری کنید. به این ترتیب، برنامه شما همچنان قابل پاسخگویی است و کاربر میتواند با آن تعامل داشته باشد در حالی که عملیاتهای همروند در پسزمینه انجام میشوند.
3. مدیریت منابع بهتر
استفاده از کوروتین (coroutine) و توابع تعلیقی (suspend functions)، میتوانید بهترین استفاده را از منابع مانند پایگاه دادهها، شبکه و فایلها بکنید. به عنوان مثال، میتوانید منابع را برای مدت زمان لازم برای انجام عملیات رزرو کنید و پس از اتمام عملیات، آنها را آزاد کنید.
4. امکان تعیین برخی از خصوصیات عملکرد کروتینز
کوروتین (coroutine) امکاناتی مانند تاخیر (delay)، تکرار (repeat) و تنظیمات مربوط به نخها (thread) و dispatcherها را فراهم میکنند. با استفاده از این امکانات، میتوانید عملکرد کروتینها را به دلخواه خود تنظیم کنید.
5. سازگاری با برنامهنویسی رویدادمحور
کوروتین (coroutine) با برنامهنویسی رویدادمحور (event-driven programming) سازگار هستند. این به معنی این است که میتوانید آنها را به عنوان جایگزینی برای روشهای سنتی مانند Callback و flow در رویدادها و فعالیتهای مرتبط با واسط کاربری (UI) استفاده کنید.
با استفاده از کوروتین (coroutine) در اندروید، میتوانید بهبودهای قابل توجهی در عملکرد و پاسخگویی برنامه خود ایجاد کنید وکدهای همروند و پاسخگو را برای کاربران خود فراهم کنید. این به شما امکان میدهد برنامههای همروند و بازتابدهنده (reactive) بسازید که به بهبود عملکرد و تجربه کاربری منجر میشوند.
یک مثال کامل از پیادهسازی کوروتین (coroutine) با استفاده از زبان Kotlin
در این مثال، یک برنامه ساده برای دریافت اطلاعات از یک وبسرویس و نمایش آن در رابط کاربری اندروید را پیادهسازی میکنیم. برای این منظور، از کتابخانه kotlinx.coroutines استفاده خواهیم کرد.
ابتدا، به فایل build.gradle (مودیول app) پروژه اندروید خود رفته و کتابخانه kotlinx.coroutines را به dependencies اضافه کنید:
dependencies { // ... implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0' // ... }
حالا، یک فعالیت (Activity) جدید به نام MainActivity بسازید و کد زیر را در آن قرار دهید:
import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import kotlinx.android.synthetic.main.activity_main.* import kotlinx.coroutines.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) button.setOnClickListener { // شروع کروتین جدید CoroutineScope(Dispatchers.Main).launch { // نمایش نوار پیشرفت progressBar.visibility = View.VISIBLE // انجام درخواست شبکه در کروتین بکگراند val result = withContext(Dispatchers.IO) { performNetworkRequest() } // نمایش نتیجه در رابط کاربری textView.text = result // مخفی کردن نوار پیشرفت progressBar.visibility = View.GONE } } } private suspend fun performNetworkRequest(): String { // تقلید از یک درخواست شبکه طولانی delay(3000) return "نتیجه درخواست شبکه" } }
در این مثال، وقتی کاربر روی دکمه کلیک میکند، یک کروتین جدید شروع میشود. در این کروتین، ابتدا نوار پیشرفت را نمایش میدهیم، سپس با استفاده از کروتین بکگراند (IO)، یک درخواست شبکه انجام میدهیم و نتیجه را دریافت میکنیم. در انتها نتیجه را در رابط کاربری نمایش میدهیم و نوار پیشرفت را مخفی میکنیم.
بهعلاوه، در تابع performNetworkRequest() از تابع delay() استفاده میکنیم تا شبیهسازی کنیم که یک درخواست شبکه طولانی انجام میشود.
این مثال به شما نشان میدهد که چگونه میتوانید با استفاده از کروتینز، عملیاتهای همروند را در اندروید پیادهسازی کنید و در نتیجه برنامههایی با پاسخگویی بهتر و تجربه کاربری بهتر ایجاد کنید.
و همچنین ممنون میشم از طریق ستارههای این پایین به این مقاله امتیاز بدی و اگه هر سوالی داشتی توی قسمت دیدگاه بپرس و قطعا بهت پاسخ میدیم.
2 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.