Mengenal Apa Itu Kotlin Coroutines Dan Bagaimana ALODOKTER Mengimplementasikannya
Coroutines merupakan salah satu fitur unggulan pada Kotlin yang diperkenalkan pada Kotlin versi 1.1. Coroutines adalah cara baru untuk menulis kode asynchronous dan non-blocking atau bisa juga dikatakan sebagai cara untuk mengatasi masalah concurrency atau async programming (sederhananya adalah mengubah pemanggilan async code menjadi seperti sync code). Sederhananya, coroutines memungkinkan kita membuat program asynchronous dengan cara yang sangat lancar, menggunakan suspending functions. Fungsi ini dapat menghentikan eksekusi saat dipanggil dan membuatnya berlanjut setelah selesai menjalankan tugasnya sendiri.
Berikut contoh penerapan coroutine pada code project ALODOKTER :
Lalu, apakah coroutines sama dengan threads? jawabannya adalah tidak.
Seperti yang sudah teman — teman ketahui sebelumnya walaupun coroutines dan threads bekerja dengan cara yang sama, coroutines jauh lebih ringan dan efisien. Anda bisa memiliki jutaan coroutines yang berjalan pada beberapa threads. Jika dibandingkan dengan threads, coroutines tidak hanya mudah diterapkan, melainkan juga jauh lebih powerful. Kelebihan tersebut terutama berlaku pada lingkungan mobile seperti android, di mana setiap milliseconds kenaikan kinerja sangat diperhitungkan. Selain itu, perbedaan lainnya adalah coroutines dikelola oleh pengguna, sedangkan threads dikelola oleh sistem operasi.
Berikut adalah sebuah pernyataan dalam dokumentasi resmi kotlin :
“One can think of a coroutine as a lightweight thread. Like threads, coroutines can run in parallel, wait for each other, and communicate. The biggest difference is that coroutines are very cheap, almost free; we can create thousands of them, and pay very little in terms of performance. True threads, on the other hand, are expensive to start and keep around. A thousand threads can be a serious challenge for a modern machine.”
Dari pernyataan diatas dapat diartikan bahwa coroutines sebagai thread yang ringan bobotnya. Seperti threads, coroutines bisa berjalan paralel, menunggu satu sama lain, dan berkomunikasi. Perbedaan terbesar adalah bahwa coroutines sangatlah ringan. Kita bisa membuat ribuan coroutines dengan sangat mudah. (Sementara itu), Thread pada umumnya tergolong berat untuk memulai dan memeliharanya. Ribuan threads bisa menjadi tantangan serius bagi mesin modern saat ini.
Pernyataan dari situs resmi Kotlin tersebut mendeskripsikan bagaimana keunggulan dari coroutines itu sendiri. Lebih lanjut, Kotlin juga telah menyediakan banyak sintaks yang dapat mempermudah kita dalam menggunakannya.
Saat ini coroutines telah mencapai versi 1.3 yang dimana JetBrains selaku tim pengembang berkomitmen untuk mempertahankan Backward Compatibility untuk tiap perubahan yang akan di rilis kedepannya.
Contoh Menerapkan Kotlin Coroutines Pada Project
Bersamaan dengan article ini dibuat coroutines telah mencapai versi stabil yaitu 1.3 dengan fondasi yang lebih kuat untuk mengelola asyncronous jobs pada skala apa pun termasuk composition, cancelation, exception handling dan penggunaan UI yang lebih spesifik. Untuk bisa menerapkan coroutines ke dalam proyek Android Studio anda bisa langsung menambahkan dependensi berikut pada build.gradle.
Coroutines memiliki 2 (dua) fungsi utama yaitu fungsi launch{} dan async{}. Kedua fungsi tersebut memungkinkan kita untuk melakukan proses asyncronous. Fungsi launch{} tidak mengembalikan nilai apapun. Sementara fungsi async{} akan mengembalikan sebuah instance dari Deferred, yang memiliki fungsi await() untuk mengembalikan hasil coroutine. Berikut adalah contoh penggunaan fungsi launch{}:
Kita telah menggunakan fungsi launch{} untuk memulai coroutine baru yang mengembalikan sebuah job atau proses yang berjalan di background tanpa menghasilkan nilai apapun. Perlu diperhatikan bahwa dalam program berbasis coroutines masih terdapat thread. Sebuah thread saja kita bisa menjalankan banyak coroutines. Alhasil, kita tidak perlu membutuhkan banyak thread. Jika Anda menjalankan kode di atas, maka konsol akan menampilkan teks “Hello Bams Coroutines!” setelah 5 (lima) detik. Fungsi delay() pada contoh kode di atas merupakan sebuah suspending function, yang bisa menghentikan sebuah eksekusi ketika ia dipanggil dan melanjutkan eksekusi ketika tugasnya sudah selesai.
Perlu diingat bahwa suspending function hanya bisa dipanggil dari sebuah coroutine atau suspending function lainnya. Kita juga bisa membuat suspending function dengan memanfaatkan modifier suspend seperti contoh berikut :
Selanjutnya, kita akan mencoba membuat contoh untuk fungsi async{}. Fungsi ini tidak jauh berbeda dengan fungsi launch{}. Hanya saja fungsi ini akan mengembalikan sebuah tangguhan atau deferred yang nantinya akan memberikan sebuah hasil dari coroutines. Kita bisa mendapatkan hasil dari tangguhan tersebut dengan menggunakan fungsi await(). Kita juga bisa membatalkan tangguhan saat ia masih berjalan. Sebagai contoh, kita akan membuat 2 (dua) suspending function seperti berikut ini :
Fungsi isActive() di atas merupakan sebuah fungsi untuk mengetahui apakah sebuah tangguhan masih berjalan. Untuk tahu apa sebuah tangguhan sudah selesai (atau belum), kita bisa menjalankan fungsi isCompleted() seperti berikut :
Dari segi penerapan, tidak terdapat perbedaan yang signifikan antara coroutines versi eksperimental sebelumnya dengan versi stabil. Hanya saja, jika sebelumnya fungsi launch dan async bisa langsung diakses, sekarang fungsi tersebut hanya bisa diakses melalui GlobalScope.
Untuk menjalankan coroutine dibutuhkan Coroutine Scope dan pada contoh diatas saya menggunakan GlobalScope yang berarti lifecycle coroutinenya mengikuti lifecycle seluruh aplikasi.
Mungkin demikian sedikit pengenalan kotlin coroutine serta penerapannya pada project yang akan kita buat. Mungkin bila ada waktu kita akan membahas lebih lanjut tentang cara menggunakan coroutine dengan lebih praktis!. Untuk kelengkapan code dapat dilihat pada github saya : https://github.com/bambanghariantosianturi
Referensi :
https://kotlinlang.org/docs/reference/coroutines-overview.html
https://medium.com/androiddevelopers/coroutines-on-android-part-ii-getting-started-3bff117176dd
https://developer.android.com/kotlin/coroutines
KADE (Kotlin Android Developer Expert) Dicoding
0 komentar:
Post a Comment