Masukkan Password
25 The Complete Kotlin Course #24- DownTo & Repeat - Kotlin Tutorials for Beginners
Lesson ini melanjutkan for loop yang sebelumnya sudah kita pelajari. Kali ini ada 3 konsep penting:
repeat()→ mengulang kode sejumlah tertentu.step→ menentukan loncatan nilai dalamfor.downTo+step→ membuat loop mundur dengan loncatan tertentu.
Bagian ini penting karena sekarang kamu mulai bisa mengontrol nilai apa saja yang dilewati oleh loop, bukan sekadar 1..10 secara berurutan.
1. repeat() — mengulang beberapa kali
Sebelumnya kita membuat loop seperti:
for (i in 1..10) {
println("Hello")
}
Kalau tujuan kita hanya mengulang "Hello" sebanyak 10 kali, sebenarnya kita tidak membutuhkan i.
Kenapa?
Karena kita tidak menggunakan nilai:
1
2
3
...
10
Kita hanya ingin:
“Jalankan kode ini 10 kali.”
Untuk kasus seperti itu, Kotlin menyediakan:
repeat(10) {
println("Hello")
}
2. Syntax repeat
Bentuk sederhananya:
repeat(numberOfTimes) {
// kode yang diulang
}
Contoh:
repeat(5) {
println("Hello")
}
Output:
Hello
Hello
Hello
Hello
Hello
Kode di dalam {} dijalankan 5 kali.
3. Kenapa tidak pakai for saja?
Bisa saja menggunakan:
for (i in 1..5) {
println("Hello")
}
Tetapi kita sebenarnya tidak menggunakan i.
for (i in 1..5) {
↑
tidak dipakai
}
Dengan repeat:
repeat(5) {
println("Hello")
}
lebih jelas maksudnya:
“Saya memang sengaja ingin mengulang kode sebanyak 5 kali.”
Jadi perbedaannya adalah niat/programmer intent.
for
Cocok ketika nilai iterasinya penting:
for (i in 1..5) {
println(i)
}
Kita membutuhkan i.
repeat
Cocok ketika kita hanya peduli berapa kali kode dijalankan:
repeat(5) {
println("Hello")
}
Kita tidak peduli nilai 1, 2, 3, dan seterusnya.
4. Contoh repeat() dengan sum
Di video, instruktur mencoba membuat perhitungan menggunakan repeat.
Misalnya kita ingin:
1 + 2 + 3 + ... + 10
Kita bisa menggunakan:
var sum = 0
repeat(10) { i ->
sum += i + 1
}
println(sum)
Hasil:
55
Perhatikan sesuatu yang penting:
repeat(10) { i ->
repeat memang menyediakan indeks/urutan iterasi yang dimulai dari 0.
Jadi i akan:
0
1
2
3
...
9
Kalau kita ingin menjumlahkan 1..10, maka kita gunakan:
i + 1
sehingga:
i = 0 → i + 1 = 1
i = 1 → i + 1 = 2
i = 2 → i + 1 = 3
...
i = 9 → i + 1 = 10
5. Tetapi kalau tidak membutuhkan indeks?
Kalau kita hanya ingin mencetak sesuatu 10 kali:
repeat(10) {
println("Hello")
}
Tidak perlu menulis:
repeat(10) { i ->
Karena i tidak digunakan.
Ini konsep yang bagus untuk kamu ingat:
repeat()bisa memberikan indeks, tetapi kita tidak harus menggunakannya.
6. Sekarang kembali ke for: step
Kita sebelumnya punya:
for (i in 1..10) {
println(i)
}
Hasil:
1
2
3
4
5
6
7
8
9
10
Artinya setiap angka dilewati dengan jarak:
1 → 2 → 3 → 4 → 5 ...
+1 +1 +1
Bagaimana kalau kita ingin:
1
3
5
7
9
?
Kita bisa menggunakan:
step 2
7. step 2
Contoh:
for (i in 1..10 step 2) {
println(i)
}
Hasil:
1
3
5
7
9
Perhatikan:
1 → 3 → 5 → 7 → 9
Setiap kali bergerak, kita menambahkan 2.
Jadi:
1 + 2 = 3
3 + 2 = 5
5 + 2 = 7
7 + 2 = 9
8. Kenapa hasilnya hanya angka ganjil?
Karena kita memulai dari:
1
dan setiap kali menambahkan:
2
Maka:
1 → 3 → 5 → 7 → 9
Semuanya ganjil.
Kalau kita mulai dari 2:
for (i in 2..10 step 2) {
println(i)
}
hasilnya:
2
4
6
8
10
Semuanya genap.
Jadi pola pentingnya:
start + step + step + step ...
9. step bukan berarti “lompat dua angka”
Ini bagian yang perlu diperhatikan dari subtitle.
Video beberapa kali mengatakan kurang lebih:
“jumping two numbers”
Untuk pemahaman yang lebih tepat:
step 2
berarti:
nilai berpindah dengan jarak 2.
Contoh:
1 → 3
Jaraknya 2.
Bukan berarti kita melewati dua angka penuh.
Karena dari:
1 → 2 → 3
kita sebenarnya melewati satu nilai, yaitu 2.
Jadi lebih tepat mengatakan:
“naik 2 setiap iterasi.”
10. Perbandingan tanpa dan dengan step
Tanpa step
for (i in 1..10) {
println(i)
}
1
2
3
4
5
6
7
8
9
10
Dengan step 2
for (i in 1..10 step 2) {
println(i)
}
1
3
5
7
9
Dengan step 3
for (i in 1..10 step 3) {
println(i)
}
1
4
7
10
Karena:
1 + 3 = 4
4 + 3 = 7
7 + 3 = 10
11. step bisa lebih dari 2
Tidak hanya:
step 2
Kita juga bisa:
step 3
atau:
step 5
Misalnya:
for (i in 0..20 step 5) {
println(i)
}
Hasil:
0
5
10
15
20
Jadi:
stepmenentukan jarak antar nilai yang diproses oleh loop.
12. Sekarang downTo
Sebelumnya kita belajar:
5 downTo 1
hasil:
5
4
3
2
1
Sekarang kita gabungkan dengan step.
Misalnya:
for (i in 10 downTo 1 step 2) {
println(i)
}
Hasil:
10
8
6
4
2
Perhatikan:
10 → 8 → 6 → 4 → 2
Setiap iterasi turun 2.
13. Bagaimana cara membaca 10 downTo 1 step 2?
Bacanya:
“Mulai dari 10, turun sampai 1, dengan langkah 2.”
Secara visual:
10
↓ -2
8
↓ -2
6
↓ -2
4
↓ -2
2
Nilai berikutnya seharusnya:
0
Tetapi 0 sudah melewati batas 1, sehingga loop berhenti.
14. downTo tetap inclusive
Perhatikan:
for (i in 10 downTo 1) {
println(i)
}
Hasil:
10
9
8
7
6
5
4
3
2
1
Angka 1 termasuk.
Tetapi ketika menggunakan step:
10 downTo 1 step 2
hasilnya:
10
8
6
4
2
Kenapa tidak ada 1?
Karena pola loncatannya adalah:
10 → 8 → 6 → 4 → 2 → 0
Kita tidak pernah mendarat tepat di 1.
Jadi inclusive tidak berarti “paksa angka akhir muncul”.
Ini sangat penting.
15. Contoh 10 downTo 1 step 2
Mari kita telusuri:
start = 10
Iterasi 1
i = 10
Iterasi 2
i = 8
Iterasi 3
i = 6
Iterasi 4
i = 4
Iterasi 5
i = 2
Selanjutnya:
i = 0
Tetapi 0 sudah berada di bawah batas 1.
Loop berhenti.
Jadi:
10, 8, 6, 4, 2
16. Kalau ingin mendapatkan 10, 8, 6, 4, 2, 0
Maka range-nya harus:
for (i in 10 downTo 0 step 2) {
println(i)
}
Hasil:
10
8
6
4
2
0
Karena sekarang batas akhirnya memang 0.
17. Kombinasi yang harus kamu kuasai
Sekarang kita punya beberapa bentuk.
Naik normal
1..10
1 2 3 4 5 6 7 8 9 10
Naik dengan step 2
1..10 step 2
1 3 5 7 9
Naik dengan step 3
1..10 step 3
1 4 7 10
Turun normal
10 downTo 1
10 9 8 7 6 5 4 3 2 1
Turun dengan step 2
10 downTo 1 step 2
10 8 6 4 2
18. step + until
step juga bisa digunakan dengan until.
Contoh:
for (i in 0 until 10 step 2) {
println(i)
}
Hasil:
0
2
4
6
8
Ingat:
0 until 10
berarti 10 tidak termasuk.
Kemudian step 2 membuat:
0 → 2 → 4 → 6 → 8
19. Contoh yang sangat berguna: angka genap
Misalnya kita ingin mencetak angka genap dari 2 sampai 20.
Daripada:
for (i in 2..20) {
if (i % 2 == 0) {
println(i)
}
}
Kita bisa langsung:
for (i in 2..20 step 2) {
println(i)
}
Hasil:
2
4
6
8
10
12
14
16
18
20
Ini lebih sederhana karena kita langsung menentukan pola iterasinya.
20. Contoh angka ganjil
Untuk angka ganjil:
for (i in 1..20 step 2) {
println(i)
}
Hasil:
1
3
5
7
9
11
13
15
17
19
Kita mulai dari 1, lalu naik 2.
21. Hubungan dengan materi % yang sebelumnya
Kamu sebelumnya sudah belajar:
number % 2 == 0
untuk mengecek angka genap.
Sekarang kita punya cara lain:
for (i in 2..20 step 2)
Perbedaannya:
Menggunakan %
Kita mengambil semua angka:
1 2 3 4 5 6 ...
kemudian mengecek mana yang genap.
Menggunakan step
Kita langsung mengunjungi:
2 4 6 8 ...
Jadi step bisa mengontrol pola iterasi dari awal.
22. repeat() vs for
Ini juga wajib dibedakan.
| Kebutuhan | Gunakan |
|---|---|
| Hanya ingin mengulang N kali | repeat() |
| Membutuhkan nilai setiap iterasi | for |
| Ingin melewati range | for |
| Ingin step tertentu | for |
| Ingin loop naik/turun | for |
Contoh:
Hanya 5 kali
repeat(5) {
println("Hello")
}
Membutuhkan angka
for (i in 1..5) {
println(i)
}
23. Cara membedah for yang kompleks
Misalnya kamu melihat:
for (i in 10 downTo 0 step 2) {
println(i)
}
Jangan panik.
Pecah menjadi:
1. for
Saya akan melakukan loop.
2. i
Ini nilai iterasi saya.
3. 10 downTo 0
Mulai 10, bergerak turun sampai 0.
4. step 2
Turun dengan jarak 2.
Jadi:
10 → 8 → 6 → 4 → 2 → 0
Selesai.
24. Kesalahan berpikir yang sering terjadi
Misalnya:
for (i in 1..10 step 2)
Jangan berpikir:
“Ambil 1, lalu skip 2 angka.”
Lebih tepat:
“Mulai dari 1, kemudian nilai berikutnya adalah 1 + 2.”
Jadi:
1
1 + 2 = 3
3 + 2 = 5
5 + 2 = 7
7 + 2 = 9
Begitu juga:
10 downTo 0 step 2
berarti:
10
10 - 2 = 8
8 - 2 = 6
6 - 2 = 4
4 - 2 = 2
2 - 2 = 0
Ini mental model yang paling aman.
25. Bagian sum di video
Video menunjukkan hasil seperti:
1
2
3
5
8
13
21
34
55
89
Itu bukan hasil penjumlahan 1 + 2 + 3 + ....
Itu merupakan pola Fibonacci.
Karena:
1
1 + 1 = 2
1 + 2 = 3
2 + 3 = 5
3 + 5 = 8
5 + 8 = 13
...
Jadi subtitle/video di bagian ini agak membingungkan karena kode yang dijelaskan dan hasil yang ditampilkan tampaknya tidak konsisten.
Untuk belajar repeat, jangan terlalu fokus pada contoh tersebut. Fokus pada konsep utamanya:
repeat(10) {
// kode
}
→ kode dijalankan 10 kali.
26. Ringkasan besar lesson
Sekarang kamu punya tiga alat baru.
A. repeat()
Untuk mengulang berdasarkan jumlah:
repeat(5) {
println("Hello")
}
Artinya:
Jalankan 5 kali.
B. step
Untuk menentukan jarak antar nilai:
for (i in 1..10 step 2) {
println(i)
}
Hasil:
1
3
5
7
9
Artinya:
Mulai dari 1, naik 2 setiap iterasi.
C. downTo
Untuk bergerak mundur:
for (i in 10 downTo 1) {
println(i)
}
Hasil:
10
9
8
7
6
5
4
3
2
1
D. downTo + step
Untuk bergerak mundur dengan loncatan tertentu:
for (i in 10 downTo 0 step 2) {
println(i)
}
Hasil:
10
8
6
4
2
0
27. Cheat sheet
Simpan pola ini:
// Naik 1-1
for (i in 1..10)
// Naik 2-2
for (i in 1..10 step 2)
// Naik 3-3
for (i in 1..10 step 3)
// Sampai sebelum 10
for (i in 1 until 10)
// Turun 1-1
for (i in 10 downTo 1)
// Turun 2-2
for (i in 10 downTo 1 step 2)
// Ulangi 10 kali tanpa membutuhkan nilai i
repeat(10) {
// code
}
Dan mental modelnya:
FOR LOOP
│
┌───────┴────────┐
↓ ↓
RANGE STEP
│ │
menentukan menentukan
arah/batas jarak lompatan
│ │
┌────┴────┐ │
↓ ↓ ↓
.. downTo step 2
naik turun
Jadi setelah lesson ini, ketika melihat:
for (i in 10 downTo 1 step 2) {
println(i)
}
kamu seharusnya langsung bisa menerjemahkannya menjadi:
“Mulai dari 10, turun sampai batas 1, dengan langkah 2.”
→
10 → 8 → 6 → 4 → 2
Sedangkan:
repeat(5) {
println("Hello")
}
langsung dipahami sebagai:
“Jalankan kode ini 5 kali; saya tidak membutuhkan nilai iterasinya.”
Itulah inti lesson ini: for memberi kita kontrol terhadap nilai yang di-iterasi, sedangkan repeat() cocok ketika yang penting hanya jumlah pengulangannya.