SlideShare a Scribd company logo
Study Jam Android #4  Maximizing the Power of Kotlin Collection and Kotlin Coroutines.pdf
Maximizing the Power of Kotlin
Collection and Kotlin
Coroutines
10 March 2024
“Habit Makes Ability”
Speakers
Rosyid Mukti Wibowo
// (C&D)
linkedin.com/in/rosyid-mukti-wibowo/
Letakkan foto
Agenda
● Pengenalan Collection
● ‘List
● Set
● Pair
● Map
● Collection
● Iterable
● Iterator
Agenda
● Slicing
● Take & Drop
● Chunked
● Fold
● Sequence Thread
● Pengenalan Coroutine
● Job
1. Pengenalan Collection
Pengenalan Collection
● Collection adalah hal umum yang biasa dimiliki di bahasa pemrograman, seperti Java, Python, Ruby dan
lain-lain
● Sebuah collection biasanya berisikan sejumlah data, bahkan bisa kosong
● Kotlin standard library menyediakan data Collection yang sudah bisa langsung kita gunakan, tanpa tambahan
library
Tipe Collection
● Secara garis besar, ada 2 jenis collection di Kotlin
1. Immutable, collection yang hanya mendukung operasi read only
2. Mutable, collection turunan immutanle, namun mendukung operasi write juga (add, edit, dan remove)
2. Pengenalan List
List
● List, adalah collection yang datanya seperti Array dan memiliki akses data menggunakan index
● Data di List boleh duplicate, artinya kita boleh memasukkan data yang sama berkali-kali ke dalam sebuah List
yang sama
Kode Program : List
Kode Program : Mutable List
3. Pengenalan Set
Set
● Set, adalah collection yang datanya harus unik dan tidak pasti berurut
● Saat kita memasukkan data duplicate ke Set, maka data hanya akan disimpan satu, data duplicatenya tidak
akan ditambahkan ke dalam Set
● Set sangat cocok untuk menyimpan data yang emang unik, tidak boleh sama
● Set menggunakan function hashCode() dan equals() untuk membandingkan apakah sebuah object sama atau
tidak, jika hashCode() dan equals() nya sama, maka dianggap data tersebut duplicate, dan tidak akan diterima
oleh Set
Kode Program : Set (1)
Kode Program : Set (2)
Kode Program : Mutable Set
4. Pengenalan Pair
Pair
● Sebelum kita bahas collection Map, ada baiknya kita mengenal Pair
● Pair adalah representasi dari data yang berpasangan
● Di Map, Pair digunakan sebagai data Map ketika pertama kali Map dibuat
Kode Program : Pair
5. Pengenalan Map
Map
● Map (atau dictionary), adalah collection yang berbentuk key-value, dimana key berperan sebagai index.
● Key harus unik, jika kita menggunakan Key yang sama, maka data sebelumnya akan di replace oleh data yang
baru
● Tipe data key bisa menggunakan tipe data apapun sesuai yang kita inginkan
Kode Program : Map
Kode Program : Mutable Map
6. Pengenalan Collection
Collection
● Semua data collection adalah turunan dari interface Collection
● Collection digunakan sebagai general operation terhadap struktur data collection, seperti membaca dan
menulis data di collection
Kode Program : Collection
Kode Program : Mutable Collection
7. Pengenalan Iterable
Iterable
● Iterable adalah superclass dari Collection interface
● Iterable adalah general operation untuk melakukan iterasi seluruh data di collection, atau menghapus data di
collection
Kode Program : Iterable
Kode Program : Mutable Iterable
8. Pengenalan Iterator
Iterator
● Sebelumnya kita sudah bahas tentang Iterator di Iterable dan MutableIterator di MutableIterable
● Iterator juga memiliki child interface, yaitu ListIterator dan MutableListIterator
● ListIterator digunakan oleh List, dan MutableListIterator digunakan oleh MutableList
● Set tetap menggunakan Iterator
● Sedangkan Map tidak mendukung Iterator
Kode Program : Iterator
Kode Program : Mutable Iterator
9. Pengenalan Slicing
Slice Operator
● Slice adalah operator yang digunakan untuk mengambil sebagian element yang ada di collection yang sesuai
dengan parameter range
Slice Operator
Slice Operator Keterangan
slice(range) Mengambil sebagian element yang ada di
collection sesuai dengan index range
Kode Program : Slice
10. Pengenalan Take & Drop
Take & Drop Operators
● Untuk mengambil sebagian element di collection, selain menggunakan slice, kita juga bisa menggunakan
operator take dan drop
Take Operators
Slice Operator Keterangan
take(n) Mengambil collection diawal sejumlah n
takeLast(n) Mengambil collection diakhir sejumlah n
takeWhile((T) -> Boolean) Mengambil element dari awal selama
kondisi bernilai true, jika false, maka
berhenti
takeWhileLast((T) -> Boolean) Sama seperti takeWhile, namun dimulai
dari element akhir
Drop Operators
Slice Operator Keterangan
drop(n) Menghapus collection di awal sejumlah n
dropLast(n) Menghapus collection di akhir sejumlah n
dropWhile((T) -> Boolean) Menghapus element dari awal selama
kondisi bernilai true, jika false, maka
berhenti
dropWhileLast((T) -> Boolean) Sama seperti dropWhile, namun dimulai
dari element akhir
Kode Program : Take & Drop
11. Pengenalan Chunked
Chunked Operator
● Chunked adalah operasi untuk memotong collection menjadi beberapa collection
Chunked Operator
Chunked Operator Keterangan
chunked(n) : List<List<T>> Memotong collection menjadi beberapa
collection dengan jumlah data n
chunked(n, (List<T>) -> R) : List<R> Memotong collection menjadi beberapa
collection dengan jumlah data n, lalu
melakukan transformasi List<T> menjadi R,
sehingga menghasilkan List<R>
Kode Program : Chunked
12. Pengenalan Fold & Reduce
Fold & Reduce
● Jika kita ingin membuat aggregate secara manual, kita bisa menggunakan operator fold dan reduce
● Fold dan reduce merupakan operasi yang dilakukan pada element-element yang ada di collection secara
iterasi sequential dan mengembalikan hasil.
● Hasil dari fold dan reduce akan digunakan untuk iterasi selanjutnya.
Fold & Reduce Operator (1)
Fold & Reduce Operator Keterangan
reduce((R, T) -> R) : R Pada iterasi pertama, R adalah element
pertama, T adalah element selanjutnya.
Iterasi selanjutnya, R adalah hasil dari
iterasi sebelumnya
fold(R, (R, T) -> R) : R fold sama dengan reduce, yang
membedakan adalah, fold memiliki inisial
value R yang bisa kita masukkan secara
manual
Fold & Reduce Operator (2)
Fold & Reduce Operator Keterangan
reduceRight() & foldRight() Sama seperti reduce() dan fold() namun
dimulai dari element akhir
reduceIndexed() & foldIndexed() Sama seperti reduce() dan fold() namun
terdapat parameter index
reduceRightIndexed() & foldRightIndexec() Sama seperti reduceIndexec() dan
foldIndexec() namun dimulai dari element
akhir
Kode Program : Fold & Reduce
13. Pengenalan Sequence
Sequence
● Selain List, Set dan Map, di Kotlin juga terdapat collection yang bernama Sequence
● Sequence sekilas sama dengan collection lain, namun berbeda cara kerjanya ketika kita menambahkan banyak
operasi ke sequence
● Collection lain, ketika kita menambahkan beberapa operasi, semua akan dieksekusi secara eager. Setiap
proses akan mengembalikan collection baru.
● Berbeda dengan sequence, sequence mengeksekusi semua operasi secara lazy. Hanya akan dieksekusi ketika
dibutuhkan
Kode Program : Bukan Sequence
Kode Program : Sequence
Kapan Menggunakan Sequence?
Gunakan ketika :
● Data collection besar
● Operasi collection kompleks dan banyak
Jangan gunakan ketika :
● Data collection tidak terlalu besar, karena ada overhead lazy object di
Sequence
● Operasi yang dilakukan sederhana
14. Pengenalan Coroutine
Problem di Java Thread
● Java Thread tidak didesain untuk melakukan Concurrency Programming.
● Java Thread hanya bisa melakukan satu hal sampai selesai, baru melakukan hal lain
● Salah satu implementasi Concurrency Programming yang saat ini paling populer adalah Go-Lang Goroutine
● Untungnya di Kotlin, ada fitur yang bernama Coroutine, salah satu implementasi Concurrency Programming
Pengenalan Coroutine
● Coroutine sering diistilahkan sebagai lightweight thread (thread ringan), walaupun sebenarnya coroutine
sendiri bukanlah thread.
● Coroutine sebenarnya di eksekusi di dalam thread, namun dengan coroutine sebuah thread bisa memiliki
kemampuan untuk menjalankan beberapa coroutine secara bergantian (concurrent)
● Artinya jika sebuah thread menjalankan 10 coroutine, sebenarnya thread akan menjalankan coroutine satu
per satu secara bergantian
● Perbedaan lain thread dan coroutine adalah coroutine itu murah dan cepat, sehingga kita bisa membuat
ribuan atau bahkan jutaan coroutine secara cepat dan murah tanpa takut kelebihan memory
Suspend Function
● Suspend computation adalah komputasi yang bisa ditangguhkan (ditunda waktu eksekusinya).
● Sebelumnya kita tahu untuk menangguhkan komputasi di Java, kita biasanya menggunakan Thread.sleep(),
sayangnya Thread.sleep() akan mem-block thread yang sedang berjalan saat ini. Sehingga tidak bisa
digunakan.
● Kotlin memiliki sebuah fitur bernama suspending function, dimana kita bisa menangguhkan waktu eksekusi
sebuah function, tanpa harus mem-block thread yang sedang menjalankannya.
● Syarat menjalankan suspend function di Kotlin adalah, harus dipanggil dari suspend function lainnya.
Membuat Coroutine
● Coroutine tidak bisa berjalan sendiri, dia perlu berjalan di dalam sebuah Scope.
● Salah satu scope yang bisa kita gunakan adalah GlobalScope
● Untuk membuat coroutine, kita bisa menggunakan method launch()
● Dan di dalam coroutine, kita bisa memanggil suspend function
Kode Program : Coroutine
15. Pengenalan Job
Job
● Saat sebuah coroutine dijalankan menggunakan function launch, sebenarnya function tersebut
mengembalikan sebuah object Job
● Dengan object Job, kita bisa menjalankan, membatalkan atau menunggu sebuah coroutine
Kode Program : Menjalankan Job
Kode Program : Menunggu Job
Kode Program : Membatalkan Job
Referensi Materi
https://docs.google.com/presentation/d/1HKWwDaJQXk7dvqyk-HErDgaWDJ9t2awd5yLdjAZDh64/edit#slide=i
d.ga65c1e78f0_0_140
https://www.dicoding.com/academies/80
Thank you for joining!
… and see you !

More Related Content

PDF
Storytelling For The Web: Integrate Storytelling in your Design Process
PDF
Artificial Intelligence, Data and Competition – SCHREPEL – June 2024 OECD dis...
PDF
How to Leverage AI to Boost Employee Wellness - Lydia Di Francesco - SocialHR...
PDF
2024 Trend Updates: What Really Works In SEO & Content Marketing
PDF
Study Jam Andorid #3 Building Object-Oriented Programming Foundations with Ko...
PDF
Basic Laravel.pdf
PDF
Build Your First Web App.pdf
PDF
2024 State of Marketing Report – by Hubspot
Storytelling For The Web: Integrate Storytelling in your Design Process
Artificial Intelligence, Data and Competition – SCHREPEL – June 2024 OECD dis...
How to Leverage AI to Boost Employee Wellness - Lydia Di Francesco - SocialHR...
2024 Trend Updates: What Really Works In SEO & Content Marketing
Study Jam Andorid #3 Building Object-Oriented Programming Foundations with Ko...
Basic Laravel.pdf
Build Your First Web App.pdf
2024 State of Marketing Report – by Hubspot

Recently uploaded (8)

PPTX
Materi_Array_Karakter_String untuk kelas XI sma.pptx
PPT
pengantar-sistem-informasi manajemen.ppt
PPTX
PEMAHAMAN MAPEL KODING DAN KECERDASAN ARTIFICIAL
DOCX
Antivirus Versi.FULL.JALiN.KB.PRO Keutuhan Aplikasi Konsep dan Praktik dalam ...
DOCX
Keutuhan Aplikasi Konsep dan Praktik dalam Upaya menciptakan aplikasi Anti Vi...
PPTX
Peranan AI dalam Dunia Pendidikan dan Industri Aplikasinya
PPTX
Implementasi Microservices pada Manufaktur
PPTX
PERANCANGAN DAN PENGEMBANGAN VIDEO GAME SEBAGAI MEDIA TERAPI DEPRESI
Materi_Array_Karakter_String untuk kelas XI sma.pptx
pengantar-sistem-informasi manajemen.ppt
PEMAHAMAN MAPEL KODING DAN KECERDASAN ARTIFICIAL
Antivirus Versi.FULL.JALiN.KB.PRO Keutuhan Aplikasi Konsep dan Praktik dalam ...
Keutuhan Aplikasi Konsep dan Praktik dalam Upaya menciptakan aplikasi Anti Vi...
Peranan AI dalam Dunia Pendidikan dan Industri Aplikasinya
Implementasi Microservices pada Manufaktur
PERANCANGAN DAN PENGEMBANGAN VIDEO GAME SEBAGAI MEDIA TERAPI DEPRESI
Ad
Ad

Study Jam Android #4 Maximizing the Power of Kotlin Collection and Kotlin Coroutines.pdf

  • 2. Maximizing the Power of Kotlin Collection and Kotlin Coroutines 10 March 2024
  • 3. “Habit Makes Ability” Speakers Rosyid Mukti Wibowo // (C&D) linkedin.com/in/rosyid-mukti-wibowo/ Letakkan foto
  • 4. Agenda ● Pengenalan Collection ● ‘List ● Set ● Pair ● Map ● Collection ● Iterable ● Iterator
  • 5. Agenda ● Slicing ● Take & Drop ● Chunked ● Fold ● Sequence Thread ● Pengenalan Coroutine ● Job
  • 7. Pengenalan Collection ● Collection adalah hal umum yang biasa dimiliki di bahasa pemrograman, seperti Java, Python, Ruby dan lain-lain ● Sebuah collection biasanya berisikan sejumlah data, bahkan bisa kosong ● Kotlin standard library menyediakan data Collection yang sudah bisa langsung kita gunakan, tanpa tambahan library
  • 8. Tipe Collection ● Secara garis besar, ada 2 jenis collection di Kotlin 1. Immutable, collection yang hanya mendukung operasi read only 2. Mutable, collection turunan immutanle, namun mendukung operasi write juga (add, edit, dan remove)
  • 10. List ● List, adalah collection yang datanya seperti Array dan memiliki akses data menggunakan index ● Data di List boleh duplicate, artinya kita boleh memasukkan data yang sama berkali-kali ke dalam sebuah List yang sama
  • 12. Kode Program : Mutable List
  • 14. Set ● Set, adalah collection yang datanya harus unik dan tidak pasti berurut ● Saat kita memasukkan data duplicate ke Set, maka data hanya akan disimpan satu, data duplicatenya tidak akan ditambahkan ke dalam Set ● Set sangat cocok untuk menyimpan data yang emang unik, tidak boleh sama ● Set menggunakan function hashCode() dan equals() untuk membandingkan apakah sebuah object sama atau tidak, jika hashCode() dan equals() nya sama, maka dianggap data tersebut duplicate, dan tidak akan diterima oleh Set
  • 15. Kode Program : Set (1)
  • 16. Kode Program : Set (2)
  • 17. Kode Program : Mutable Set
  • 19. Pair ● Sebelum kita bahas collection Map, ada baiknya kita mengenal Pair ● Pair adalah representasi dari data yang berpasangan ● Di Map, Pair digunakan sebagai data Map ketika pertama kali Map dibuat
  • 22. Map ● Map (atau dictionary), adalah collection yang berbentuk key-value, dimana key berperan sebagai index. ● Key harus unik, jika kita menggunakan Key yang sama, maka data sebelumnya akan di replace oleh data yang baru ● Tipe data key bisa menggunakan tipe data apapun sesuai yang kita inginkan
  • 24. Kode Program : Mutable Map
  • 26. Collection ● Semua data collection adalah turunan dari interface Collection ● Collection digunakan sebagai general operation terhadap struktur data collection, seperti membaca dan menulis data di collection
  • 27. Kode Program : Collection
  • 28. Kode Program : Mutable Collection
  • 30. Iterable ● Iterable adalah superclass dari Collection interface ● Iterable adalah general operation untuk melakukan iterasi seluruh data di collection, atau menghapus data di collection
  • 31. Kode Program : Iterable
  • 32. Kode Program : Mutable Iterable
  • 34. Iterator ● Sebelumnya kita sudah bahas tentang Iterator di Iterable dan MutableIterator di MutableIterable ● Iterator juga memiliki child interface, yaitu ListIterator dan MutableListIterator ● ListIterator digunakan oleh List, dan MutableListIterator digunakan oleh MutableList ● Set tetap menggunakan Iterator ● Sedangkan Map tidak mendukung Iterator
  • 35. Kode Program : Iterator
  • 36. Kode Program : Mutable Iterator
  • 38. Slice Operator ● Slice adalah operator yang digunakan untuk mengambil sebagian element yang ada di collection yang sesuai dengan parameter range
  • 39. Slice Operator Slice Operator Keterangan slice(range) Mengambil sebagian element yang ada di collection sesuai dengan index range
  • 40. Kode Program : Slice
  • 42. Take & Drop Operators ● Untuk mengambil sebagian element di collection, selain menggunakan slice, kita juga bisa menggunakan operator take dan drop
  • 43. Take Operators Slice Operator Keterangan take(n) Mengambil collection diawal sejumlah n takeLast(n) Mengambil collection diakhir sejumlah n takeWhile((T) -> Boolean) Mengambil element dari awal selama kondisi bernilai true, jika false, maka berhenti takeWhileLast((T) -> Boolean) Sama seperti takeWhile, namun dimulai dari element akhir
  • 44. Drop Operators Slice Operator Keterangan drop(n) Menghapus collection di awal sejumlah n dropLast(n) Menghapus collection di akhir sejumlah n dropWhile((T) -> Boolean) Menghapus element dari awal selama kondisi bernilai true, jika false, maka berhenti dropWhileLast((T) -> Boolean) Sama seperti dropWhile, namun dimulai dari element akhir
  • 45. Kode Program : Take & Drop
  • 47. Chunked Operator ● Chunked adalah operasi untuk memotong collection menjadi beberapa collection
  • 48. Chunked Operator Chunked Operator Keterangan chunked(n) : List<List<T>> Memotong collection menjadi beberapa collection dengan jumlah data n chunked(n, (List<T>) -> R) : List<R> Memotong collection menjadi beberapa collection dengan jumlah data n, lalu melakukan transformasi List<T> menjadi R, sehingga menghasilkan List<R>
  • 49. Kode Program : Chunked
  • 51. Fold & Reduce ● Jika kita ingin membuat aggregate secara manual, kita bisa menggunakan operator fold dan reduce ● Fold dan reduce merupakan operasi yang dilakukan pada element-element yang ada di collection secara iterasi sequential dan mengembalikan hasil. ● Hasil dari fold dan reduce akan digunakan untuk iterasi selanjutnya.
  • 52. Fold & Reduce Operator (1) Fold & Reduce Operator Keterangan reduce((R, T) -> R) : R Pada iterasi pertama, R adalah element pertama, T adalah element selanjutnya. Iterasi selanjutnya, R adalah hasil dari iterasi sebelumnya fold(R, (R, T) -> R) : R fold sama dengan reduce, yang membedakan adalah, fold memiliki inisial value R yang bisa kita masukkan secara manual
  • 53. Fold & Reduce Operator (2) Fold & Reduce Operator Keterangan reduceRight() & foldRight() Sama seperti reduce() dan fold() namun dimulai dari element akhir reduceIndexed() & foldIndexed() Sama seperti reduce() dan fold() namun terdapat parameter index reduceRightIndexed() & foldRightIndexec() Sama seperti reduceIndexec() dan foldIndexec() namun dimulai dari element akhir
  • 54. Kode Program : Fold & Reduce
  • 56. Sequence ● Selain List, Set dan Map, di Kotlin juga terdapat collection yang bernama Sequence ● Sequence sekilas sama dengan collection lain, namun berbeda cara kerjanya ketika kita menambahkan banyak operasi ke sequence ● Collection lain, ketika kita menambahkan beberapa operasi, semua akan dieksekusi secara eager. Setiap proses akan mengembalikan collection baru. ● Berbeda dengan sequence, sequence mengeksekusi semua operasi secara lazy. Hanya akan dieksekusi ketika dibutuhkan
  • 57. Kode Program : Bukan Sequence
  • 58. Kode Program : Sequence
  • 59. Kapan Menggunakan Sequence? Gunakan ketika : ● Data collection besar ● Operasi collection kompleks dan banyak Jangan gunakan ketika : ● Data collection tidak terlalu besar, karena ada overhead lazy object di Sequence ● Operasi yang dilakukan sederhana
  • 61. Problem di Java Thread ● Java Thread tidak didesain untuk melakukan Concurrency Programming. ● Java Thread hanya bisa melakukan satu hal sampai selesai, baru melakukan hal lain ● Salah satu implementasi Concurrency Programming yang saat ini paling populer adalah Go-Lang Goroutine ● Untungnya di Kotlin, ada fitur yang bernama Coroutine, salah satu implementasi Concurrency Programming
  • 62. Pengenalan Coroutine ● Coroutine sering diistilahkan sebagai lightweight thread (thread ringan), walaupun sebenarnya coroutine sendiri bukanlah thread. ● Coroutine sebenarnya di eksekusi di dalam thread, namun dengan coroutine sebuah thread bisa memiliki kemampuan untuk menjalankan beberapa coroutine secara bergantian (concurrent) ● Artinya jika sebuah thread menjalankan 10 coroutine, sebenarnya thread akan menjalankan coroutine satu per satu secara bergantian ● Perbedaan lain thread dan coroutine adalah coroutine itu murah dan cepat, sehingga kita bisa membuat ribuan atau bahkan jutaan coroutine secara cepat dan murah tanpa takut kelebihan memory
  • 63. Suspend Function ● Suspend computation adalah komputasi yang bisa ditangguhkan (ditunda waktu eksekusinya). ● Sebelumnya kita tahu untuk menangguhkan komputasi di Java, kita biasanya menggunakan Thread.sleep(), sayangnya Thread.sleep() akan mem-block thread yang sedang berjalan saat ini. Sehingga tidak bisa digunakan. ● Kotlin memiliki sebuah fitur bernama suspending function, dimana kita bisa menangguhkan waktu eksekusi sebuah function, tanpa harus mem-block thread yang sedang menjalankannya. ● Syarat menjalankan suspend function di Kotlin adalah, harus dipanggil dari suspend function lainnya.
  • 64. Membuat Coroutine ● Coroutine tidak bisa berjalan sendiri, dia perlu berjalan di dalam sebuah Scope. ● Salah satu scope yang bisa kita gunakan adalah GlobalScope ● Untuk membuat coroutine, kita bisa menggunakan method launch() ● Dan di dalam coroutine, kita bisa memanggil suspend function
  • 65. Kode Program : Coroutine
  • 67. Job ● Saat sebuah coroutine dijalankan menggunakan function launch, sebenarnya function tersebut mengembalikan sebuah object Job ● Dengan object Job, kita bisa menjalankan, membatalkan atau menunggu sebuah coroutine
  • 68. Kode Program : Menjalankan Job
  • 69. Kode Program : Menunggu Job
  • 70. Kode Program : Membatalkan Job
  • 72. Thank you for joining! … and see you !