Skip to Content
Kotlin📘 Ngôn ngữ Kotlin🔄 Vòng lặp for

Vòng lặp for trong Kotlin

🎯 Mục tiêu: Nắm vững vòng lặp for với ranges, progressions, indices, và các kỹ thuật duyệt collections.


💡 Khái niệm

Vòng lặp for trong Kotlin khác so với Java. Kotlin không có for loop truyền thống for(i=0; i<n; i++), thay vào đó sử dụng for-in để duyệt qua các iterable.

for (item in collection) { println(item) }

📝 Duyệt qua Ranges

Range cơ bản với ..

// 1 đến 5 (bao gồm cả 5) for (i in 1..5) { println(i) // 1, 2, 3, 4, 5 }

Range không bao gồm cuối với until

// 1 đến 4 (không bao gồm 5) for (i in 1 until 5) { println(i) // 1, 2, 3, 4 }

Đếm ngược với downTo

for (i in 5 downTo 1) { println(i) // 5, 4, 3, 2, 1 }

Bước nhảy với step

// Đếm lên, bước 2 for (i in 0..10 step 2) { println(i) // 0, 2, 4, 6, 8, 10 } // Đếm xuống, bước 3 for (i in 15 downTo 0 step 3) { println(i) // 15, 12, 9, 6, 3, 0 }

📋 Duyệt qua Collections

List

val fruits = listOf("Apple", "Banana", "Orange") for (fruit in fruits) { println(fruit) }

Với index sử dụng indices

val fruits = listOf("Apple", "Banana", "Orange") for (i in fruits.indices) { println("$i: ${fruits[i]}") } // 0: Apple // 1: Banana // 2: Orange

Với index sử dụng withIndex()

val fruits = listOf("Apple", "Banana", "Orange") for ((index, fruit) in fruits.withIndex()) { println("$index: $fruit") }

🔤 Duyệt qua String

val word = "Kotlin" for (char in word) { println(char) // K, o, t, l, i, n } // Với index for ((i, c) in word.withIndex()) { println("$i: $c") }

🗺️ Duyệt qua Map

val scores = mapOf("Alice" to 95, "Bob" to 87, "Charlie" to 92) for ((name, score) in scores) { println("$name: $score điểm") }

🔄 Repeat

Khi chỉ cần lặp n lần mà không cần biến đếm:

repeat(5) { println("Hello!") } // Với index repeat(5) { index -> println("Lần ${index + 1}") }

🔀 forEach (Functional style)

val numbers = listOf(1, 2, 3, 4, 5) // forEach numbers.forEach { println(it) } // forEachIndexed numbers.forEachIndexed { index, number -> println("$index: $number") }

🛠️ Thực hành

Bài tập 1: In bảng cửu chương

fun main() { val n = 7 // TODO: In bảng cửu chương của số n }

Lời giải:

fun main() { val n = 7 println("=== Bảng cửu chương $n ===") for (i in 1..10) { println("$n x $i = ${n * i}") } }

Bài tập 2: Tính tổng số chẵn

fun main() { // TODO: Tính tổng các số chẵn từ 1 đến 100 }

Lời giải:

fun main() { var sum = 0 for (i in 2..100 step 2) { sum += i } println("Tổng số chẵn từ 1-100: $sum") // 2550 // Hoặc functional style val sum2 = (2..100 step 2).sum() println("Tổng (functional): $sum2") }

Bài tập 3: Đảo ngược chuỗi

fun main() { val text = "Kotlin" // TODO: In chuỗi đảo ngược }

Lời giải:

fun main() { val text = "Kotlin" // Cách 1: for loop var reversed = "" for (i in text.lastIndex downTo 0) { reversed += text[i] } println(reversed) // niltoK // Cách 2: reversed() println(text.reversed()) // niltoK }

Bài tập 4: In tam giác sao

fun main() { val height = 5 // TODO: In tam giác sao // * // ** // *** // **** // ***** }

Lời giải:

fun main() { val height = 5 for (i in 1..height) { println("*".repeat(i)) } // Hoặc for (i in 1..height) { for (j in 1..i) { print("*") } println() } }

📱 Trong Android

// RecyclerView data binding items.forEachIndexed { index, item -> Log.d("Adapter", "Position $index: ${item.name}") } // Populate spinner val options = listOf("Option 1", "Option 2", "Option 3") for ((index, option) in options.withIndex()) { spinner.adapter.add(option) } // Animate views for (i in 0 until container.childCount) { val child = container.getChildAt(i) child.animate() .alpha(1f) .setStartDelay(i * 100L) .start() }

⚠️ Lưu ý quan trọng

[!WARNING] Kotlin không có for loop truyền thống:

// ❌ Không tồn tại trong Kotlin // for (int i = 0; i < 10; i++) { } // ✅ Dùng range for (i in 0 until 10) { }

[!TIP] Ưu tiên forEach khi không cần break/continue:

// Functional style - sạch đẹp hơn numbers.forEach { println(it) } // Cần break/continue? Dùng for-in for (num in numbers) { if (num > 10) break println(num) }

✅ Checklist - Tự kiểm tra

Sau bài học này, bạn có thể:

  • Sử dụng ..until cho ranges
  • Sử dụng downTo để đếm ngược
  • Sử dụng step để thay đổi bước nhảy
  • Duyệt collections với for (item in collection)
  • Lấy index với indices hoặc withIndex()
  • Sử dụng repeat(n) cho lặp đơn giản
  • Sử dụng forEach cho functional style

Tiếp theo: Vòng lặp while

Last updated on