For Loop
Sama seperti While dan Do While, For merupakan konsep perulangan pada blok yang sama selama hasil evaluasi kondisi yang diberikan terpenuhi atau
bernilai true. For dapat digunakan pada Ranges, Collections, Arrays dan apapun yang menyediakan iterator. Contoh dari For loop sendiri adalah sebagai berikut:
- fun main() {
- val ranges = 1..5
- for (i in ranges){
- println("value is $i!")
- }
- }
- /*
- output :
- value is 1!
- value is 2!
- value is 3!
- value is 4!
- value is 5!
- */
Kode di atas merupakan contoh ketika ketika melakukan perulangan pada Ranges dengan menggunakan range expression yang sudah kita pelajari sebelumnya. Karena menggunakan range expression, kita juga dapat menuliskannya seperti berikut:
- fun main() {
- val ranges = 1.rangeTo(5)
- for (i in ranges){
- println("value is $i!")
- }
- }
- /*
- output :
- value is 1!
- value is 2!
- value is 3!
- value is 4!
- value is 5!
- */
Selain itu, kita juga dapat menuliskan For loop menggunakan range expression seperti berikut:
- fun main() {
- val ranges = 1.rangeTo(10) step 3
- for (i in ranges ){
- println("value is $i!")
- }
- }
- /*
- output :
- value is 1!
- value is 4!
- value is 7!
- value is 10!
- */
Pada kode di atas, kita menambahkan ekstensi step yang akan mengembalikan nilai baru dengan tipe IntProgression dengan jarak nilai sebelumnya adalah 3.
Kita juga dapat mengakses indeks untuk setiap elemen yang ada pada Ranges dengan memanfaatkan fungsi withIndex() seperti berikut:
- fun main() {
- val ranges = 1.rangeTo(10) step 3
- for ((index, value) in ranges.withIndex()) {
- println("value $value with index $index")
- }
- }
- /*
- output :
- value 1 with index 0
- value 4 with index 1
- value 7 with index 2
- value 10 with index 3
- */
Kita menggunakan kata kunci for untuk memulai proses perulangan. Untuk tujuan yang sama, kita juga bisa loh, memanfaatkan salah satu ekstensi pada Kotlin yaitu forEach. Contohnya seperti berikut:
- fun main() {
- val ranges = 1.rangeTo(10) step 3
- ranges.forEach { value ->
- println("value is $value!")
- }
- }
- /*
- output :
- value is 1!
- value is 4!
- value is 7!
- value is 10!
- */
forEach pada kode di atas merupakan sebuah lambda expression yang hanya memiliki satu argumen yaitu nilai tunggal yang dicakup pada ranges. Jika kita mendapatkan indeks dari tiap nilai yang dicakup kita bisa menggunakan ekstensi forEachIndexed seperti berikut:
- fun main() {
- val ranges = 1.rangeTo(10) step 3
- ranges.forEachIndexed { index, value ->
- println("value $value with index $index")
- }
- }
- /*
- output :
- value 1 with index 0
- value 4 with index 1
- value 7 with index 2
- value 10 with index 3
- */
forEachIndexed memiliki dua argumen. Pertama adalah index yang merupakan indeks dari tiap nilai. Kedua adalah value yang merupakan nilai tunggal yang dicakup oleh ranges itu sendiri. Jika kita hanya ingin menggunakan argumen index, maka kita bisa mengubah argumen value menjadi _ seperti berikut:
- fun main() {
- val ranges = 1.rangeTo(10) step 3
- ranges.forEachIndexed { index, _ ->
- println("index $index")
- }
- }
- /*
- output :
- index 0
- index 1
- index 2
- index 3
- */
Sebenarnya ini merupakan sebuah aturan di mana ketika argumen dari sebuah lambda expression tidak digunakan, kita disarankan agar mengubahnya menjadi _ untuk menggantikan nama dari argumen tersebut.
Posting Komentar