[Golang cơ bản] Vòng lặp for trong golang

Post on: 2023-04-03 23:54:08 | in: Golang
Trong Golang, vòng lặp for được sử dụng để thực hiện một tập hợp các lệnh nhiều lần.

Tổng quan

Khi nói về vòng lặp, Golang có hai loại vòng lặp

  • Vòng lặp for
  • Vòng lặp for-range

Trong bài hướng dẫn này, chúng ta sẽ chỉ tập trung vào vòng lặp for. Vòng lặp while không được hỗ trợ trong Golang, nhưng ta có thể thực hiện một vòng lặp while bằng cách sử dụng vòng lặp for như chúng ta sẽ thấy sau đây trong bài hướng dẫn.

Vòng lặp for trong Golang có ba phần chính như sau:

  • Phần khởi tạo (init part)
  • Phần điều kiện (condition part)
  • Phần thay đổi (post part)
for init_part; condition_part; post_part {
   ...
}

Đây là chuỗi thực thi của ba phần trong vòng lặp for:

  • Phần khởi tạo (init part) được thực thi trước khi lần lặp đầu tiên bắt đầu.
  • Phần điều kiện (condition part) được thực thi trước mỗi lần lặp. Nếu điều kiện là sai (false) thì vòng lặp sẽ kết thúc, ngược lại vòng lặp sẽ tiếp tục lặp.
  • Phần thay đổi (post part) được thực thi sau mỗi lần lặp. Sau đó điều kiện sẽ được kiểm tra, nếu điều kiện là đúng (true) thì vòng lặp sẽ tiếp tục, ngược lại vòng lặp sẽ kết thúc.

Một số điểm cần lưu ý về vòng lặp for:

  • Dấu ngoặc đơn không bắt buộc ở vòng lặp for nhưng cặp ngoặc nhọn bao quanh phần thân là bắt buộc.
  • Phần khởi tạo và phần thay đổi là tùy chọn.
  • Phần khởi tạo có thể là bất kỳ câu lệnh nào có khai báo ngắn gọn, gọi hàm hoặc gán giá trị. Nếu phần khởi tạo có khai báo biến, phạm vi của biến đó chỉ giới hạn trong vòng lặp for.
  • Phần thay đổi có thể là bất kỳ câu lệnh nào nhưng thường chứa mã tăng giá trị biến lặp. Phần thay đổi không thể chứa phần khởi tạo. Trình biên dịch sẽ báo lỗi nếu chúng ta thêm bất kỳ phần khởi tạo nào vào phần thay đổi.

Ví dụ

Vòng lặp for đơn giản

package main

import "fmt"

func main() {
    for i := 0; i < 5; i++ {
        fmt.Println(i)
    }
}

Output:

0
1
2
3
4

Vòng lặp for chỉ với điều kiện

package main

import "fmt"
​​​​​​​
func main() {
    i := 0
    for i < 5 {
        fmt.Println(i)
        i++
    }
}

Output:

0
1
2
3
4

Vòng lặp vô hạn (Infinite loop)

package main

import (
    "fmt"
    "time"
)
​​​​​​​
func main() {
    i := 0
    for {
        fmt.Println(i)
        i++
        time.Sleep(time.Second * 1)
    }
}

Output: Chương trình trên sẽ in ra một vòng lặp vô hạn.

0
1
2
3
4
5
.
.

Lệnh Break trong vòng lặp for

Lệnh "break" giúp thoát khỏi vòng lặp for. Tất cả các lệnh sau "break" trong vòng lặp for sẽ không được thực thi.

package main

import (
    "fmt"
)
​​​​​​​
func main() {
    i := 0
    for {
        fmt.Println(i)
        i++
        if i >= 5 {
            break
        }
    }
}

Output:

0
1
2
3
4

Lệnh Continue trong vòng lặp for

Lệnh "continue" giúp bỏ qua lần lặp hiện tại của vòng lặp for. Tất cả các lệnh sau "continue" trong vòng lặp for sẽ không được thực thi và chương trình sẽ tiếp tục với lần lặp tiếp theo. Lệnh "continue" thường được sử dụng khi ta muốn thao tác trên một số phần tử cụ thể trong vòng lặp for.

Hãy xem một ví dụ: Trong chương trình dưới đây, chúng ta chỉ muốn in ra các số không phải là bội của 3.

package main

import "fmt"
​​​​​​​
func main() {
    for i := 1; i < 10; i++ {
        if i%3 == 0 {
            continue
        }
        fmt.Println(i)
    }
}

Output:

1
2
4
5
7
8
10

Vòng lặp lồng nhau trong Golang

Vòng lặp for cũng có thể được lồng nhau. Xem ví dụ bên dưới:

package main

import "fmt"
​​​​​​​
func main() {
    for i := 0; i < 3; i++ {
        fmt.Printf("Outer loop iteration %d\n", i)
        for j := 0; j < 2; j++ {
            fmt.Printf("i= %d j=%d\n", i, j)
        }
    }
}

Output:

Outer loop iteration 0
i= 0 j=0
i= 0 j=1
Outer loop iteration 1
i= 1 j=0
i= 1 j=1
Outer loop iteration 2
i= 2 j=0
i= 2 j=1

Gọi hàm và gán giá trị trong phần khởi tạo của vòng lặp for

Đoạn code dưới đây là một ví dụ cho thấy chúng ta có thể gọi hàm hoặc thực hiện phép gán trong phần khởi tạo của vòng lặp for.

package main

import "fmt"

func main() {
    i := 1
    //Function call in the init part in for loop
    for test(); i < 3; i++ {
        fmt.Println(i)
    }
​​​​​​​
    //Assignment in the init part in for loop
    for i = 2; i < 3; i++ {
        fmt.Println(i)
    }
}
func test() {
    fmt.Println("In test function")
}

Output

In test function
1
2
2

Cài đặt vòng lặp while sử dụng vòng lặp for

Trong Golang không có từ khóa "while". Thay vào đó, Golang chỉ có từ khóa "for". Tuy nhiên, từ khóa "for" có thể được sử dụng để mô phỏng chức năng giống như vòng lặp "while".

Vòng lặp "for" có thể được triển khai để hoạt động giống như "while" nếu phần khởi tạo và phần tăng giảm có thể được bỏ qua. Dưới đây là một ví dụ:

package main

import "fmt"
​​​​​​​
func main() {
    i := 1
    for i <= 5 {
        fmt.Println(i)
        i++
    }
}

Output:

1
2
3
4
5

Tổng kết

Đó là tất cả về vòng lặp "for" trong Golang. Hãy chia sẻ phản hồi/cải tiến/sai sót trong phần bình luận.

 
 
Tag: golang cơ bản go