Học Kotlin cơ bản

Bài 6: Vòng lặp trong Kotlin

1. Vòng lặp for

Với mọi ngôn ngữ lập trình thì các cấu trúc vòng lặp rất là quan trọng, đặc biệt là vòng for rất là phổ biến và hầu như trong mọi phần mềm đều chắc chắn sử dụng để giải quyết những công việc lặp đi lặp lại một cách có quy luật.
1. Loại for thứ 1 – Duyệt tuần tự hết giá trị trong danh sách (closed range)
for (i in a..b) { Xử lý biến i }
Với cú pháp ở trên thì biến i thực ra là biến bước nhảy, nó tự động tăng dần từ a cho tới b. Ta có thể thay tên biến i thành tên biến bất kỳ
Ví dụ 1: Viết chương trình tính giai thừa của một số nguyên dương n:
fun main(args: Array<String>) {
    var gt:Int=1
    val n:Int=5
    for (i in 1..n)
    {
        gt *= i
    }
    println("$n!=$gt")
}
Ở đoạn lệnh trên, i sẽ chạy tuần tự từ 1 tới n (với n=5). Mỗi lần chạy nó sẽ nhân dồn i cho biến gt. Kết thúc vòng lặp ta sẽ được giai thừa của n.
2. Loại for thứ 2 – Duyệt tuần tự gần hết giá trị trong danh sách (half-open range)
for (i in a until b) { Xử lý biến i }
Với cú pháp ở trên thì biến i thực ra là biến bước nhảy, nó tự động tăng dần từ a cho tới gần b. Ta có thể thay tên biến i thành tên biến bất kỳ
Ví dụ 2: Viết chương trình tính tổng từ 1 tới gần số nguyên dương n:
fun main(args: Array<String>) {
    var sum:Int=0
    val n:Int=5
    for (i in 1 until n)
    {
        sum += i
    }
    println("Tổng=$sum")
}
Được thực hiện, với kết quả: Tổng=10
3. Loại for thứ 3 – Điều hướng bước nhảy step
for (i in a .. b step x) { Xử lý biến i }
Với cú pháp ở trên thì biến i thực ra là biến bước nhảy, nó tự động tăng dần từ a cho tới b, nhưng mỗi lần duyệt nó tăng theo x đơn vị. Ta có thể thay tên biến i thành tên biến bất kỳ
Ví dụ 3: Viết chương trình tính tổng các số chẵn nhỏ hơn hoặc bằng số nguyên dương n:
fun main(args: Array<String>) {
    var sum:Int=0
    var n:Int=10
    for (i in 2 .. n step 2)
        sum+=i
    println("Tổng chẵn=$sum")
}
Chương trình chạy mỗi lần tăng i lên 2 đơn vị, ta khởi tạo i chạy từ 2 nên nó sẽ tự động tăng thành các số chẵn, gặp 10 thì nó thực hiện và kết thúc vòng lặp.
Được thực hiện, với kết quả: Tổng chẵn =30
4. Loại for thứ 4 – Điều hướng bước nhảy downTo
for (i in b downTo a) { Xử lý biến i }
Với cú pháp ở trên thì biến i thực ra là biến bước nhảy, nó tự động giảm dần từ b cho tới a, nhưng mỗi lần duyệt nó giảm 1 đơn vị. Ta có thể thay tên biến i thành tên biến bất kỳ
for (i in b downTo a step x) { Xử lý biến i }
Với cú pháp ở trên thì biến i thực ra là biến bước nhảy, nó tự động giảm dần từ b cho tới a, nhưng mỗi lần duyệt nó giảm x đơn vị. Ta có thể thay tên biến i thành tên biến bất kỳ
Ví dụ 4: Viết chương trình tính Ước số chung lớn nhất của 2 số bất kỳ
fun main(args: Array<String>) {
    var a:Int=9
    var b:Int=6
    var ucscln=1
    var min=if (a>b) b else a
    for (i in min downTo 1)
    {
        if(a%i==0 && b%i==0)
        {
            ucscln=i
            break
        }
    }
    println("USCL của $a và $b = $ucscln")
}
Được thực hiện, với kết quả: USCL của 9 và 6 = 3
5. Loại for thứ 5 – Lặp tập đối tượng
for (item in collection)
{
println(item)
}
Cấu trúc for trên sẽ duyệt từng đối tượng trong một tập đối tượng
Ví dụ 5: Duyệt danh sách tên sản phẩm
fun main(args: Array<String>) {
    var dsSanPham= arrayOf("kotlin","java","c#","python","R")
    for (item in dsSanPham)
        println(item)
}
Đoạn code trên, chương trình sẽ duyệt tuần tự từng phần tử trong mảng dsSanPham và xuất tên của chúng ra.
Ngoài ra ta cũng có thể duyệt theo vị trí, từ vị trí này ta có thể xuất ra giá trị như sau:
fun main(args: Array<String>) {
    var dsSanPham= arrayOf("kotlin","java","c#","python","R")
    for (i in dsSanPham.indices)
        println("Sản phâm thứ $i có tên "+dsSanPham[i])    
}
Cuối cùng kotlin cũng hỗ trợ vừa lấy vị trí vừa lấy giá trị theo cách sau:
fun main(args: Array<String>) {
    var dsSanPham= arrayOf("kotlin","java","c#","python","R")
    for ((index,value) in dsSanPham.withIndex())
    {
        println("Sản phẩm thứ $index có tên $value")
    }
}

2. Vòng lặp While

Đây cũng là một trong những cấu trúc lặp khá phổ biến trong các ngôn ngữ lập trình không riêng gì Kotlin, cú pháp:
while(expression)

{

  statement

}
Các bước thực hiện:
·         B1: Expression được định trị
·         B2: Nếu kết quả là true thì statement thực thi và quay lại B1
·         B3: Nếu kết quả là false thì thoát khỏi vòng lặp while.
Để thoát vòng lặp: dùng break
Để di chuyển sớm qua lần lặp tiếp theo : dùng continue

Lưu ý: Lệnh trong while có thể không được thực hiện lần nào do ngay từ đầu expression không thỏa

Ví dụ: Viết chương trình tính 5!
fun main(args: Array<String>) {
    var n:Int = 5
    var gt:Int=1
    var i:Int = 1
    while (i <= n)
    {
        gt *= i
        i++
    }
    println("$n! =$gt")
}
Như vậy, thông qua bài học này, chúng ta đã cùng nhau tìm hiểu về vòng lặp trong Kotlin. Cảm ơn các bạn đã đọc.