Lệnh điều kiện if else trong Go

Lệnh if là một lệnh điều kiện boolean và nó thực thi một khối mã nếu điều kiện đó đánh giá là true. Nó thực thi một khối khác thay thế nếu điều kiện được đánh giá là false. Trong hướng dẫn này, chúng ta sẽ xem xét các cú pháp khác nhau và cách sử dụng câu lệnh if.

Cú pháp câu lệnh if trong Go

Cú pháp của câu lệnh if được cung cấp bên dưới

if condition {  
}

Nếu condition đúng, các dòng mã giữa các dấu ngoặc nhọn {} ngay sau lệnh if sẽ được thực thi.

Không giống như các ngôn ngữ khác như C, các dấu ngoặc nhọn { } là bắt buộc ngay cả khi chỉ có một dòng mã giữa các dấu ngoặc nhọn { }.

Ví dụ về lệnh if trong Go

Hãy viết một chương trình đơn giản để tìm xem một số là chẵn hay lẻ.

package main

import (  
    "fmt"
)

func main() {  
    num := 10
    if num%2 == 0 { //checks if number is even
        fmt.Println("The number", num, "is even")
        return
    }
    fmt.Println("The number", num, "is odd")
}

Chạy chương trình trong Playground

Trong chương trình trên, điều kiện num%2 ở dòng số 9 tìm xem phần dư của phép chia num cho 2 có bằng 0 hay không. Vì 10 chia 2 có phần dừ bằng 0 trong trường hợp này, khi chạy chương trình in ra văn bản The number 10 is even.

Câu lệnh if else trong Go

Câu lệnh if có một cấu trúc else tùy chọn sẽ được thực thi nếu điều kiện trong câu lệnh if đánh giá là false.

if condition {  
} else {
}

Trong đoạn mã trên, nếu condition được đánh giá là false, thì các dòng mã giữa cặp dấu ngoặc nhọn {} của khối lệnh else sẽ được thực thi.

Hãy viết lại chương trình để tìm xem số đó là số lẻ hay số chẵn bằng cách sử dụng câu lệnh if else.

package main

import (  
    "fmt"
)

func main() {  
    num := 11
    if num%2 == 0 { //checks if number is even
        fmt.Println("the number", num, "is even")
    } else {
        fmt.Println("the number", num, "is odd")
    }
}

Chạy chương trình trong Playground

Trong đoạn mã trên, thay vì return nếu điều kiện là true như chúng ta đã làm trong phần trước, chúng ta tạo một câu lệnh else sẽ được thực thi nếu điều kiện của lệnh if là false. Trong trường hợp này, vì 11 là số lẻ, điều kiện if là false và các dòng mã trong câu lệnh else được thực thi. Chương trình trên sẽ in ra kết quả sau:

the number 11 is odd  

Câu lệnh if ... else if ... else trong Go

Câu lệnh if cũng có các thành phần tùy chọn else ifelse. Cú pháp tương tự được cung cấp bên dưới

if condition1 {  
...
} else if condition2 {
...
} else {
...
}

Các điều kiện được đánh giá từ trên xuống dưới.

Trong câu lệnh trên nếu condition1 là true, thì các dòng mã bên trong if condition1 {} được thực thi.

Nếu condition1falsecondition2 là true, các dòng mã trong else if condition2 {} được thực thi.

Nếu cả hai condition1condition2 đều là false, thì các dòng mã giữa else {} được thực thi.

Có thể có bất kỳ số lượng câu lệnh else if.

Nói chung, bất kỳ điều kiện nào của if hoặc else if được đánh giá true, thì khối mã tương ứng của nó sẽ được thực thi. Nếu không có điều kiện nào là đúng thì khốielse được thực thi.

Hãy viết một chương trình sử dụng else if.

package main

import (  
    "fmt"
)

func main() {  
    num := 99
    if num <= 50 {
        fmt.Println(num, "is less than or equal to 50")
    } else if num >= 51 && num <= 100 {
        fmt.Println(num, "is between 51 and 100")
    } else {
        fmt.Println(num, "is greater than 100")
    }
}

Chạy chương trình trong Playground

Trong chương trình trên, điều kiện else if num >= 51 && num <= 100 ở dòng số 11 là true và do đó chương trình sẽ in kết quả như sau:

99 is between 51 and 100  

Lệnh if kèm gán giá trị

Có một biến thể khác trong lệnh if nó bao gồm một câu lệnh khai báo nhanh tùy chọn được thực thi trước khi điều kiện được đánh giá. Cú pháp của nó là

if assignment-statement; condition {  
}

Trong đoạn mã trên, assignment-statement được thực thi đầu tiên trước khi điều kiện được đánh giá.

Hãy viết lại chương trình tìm số chẵn hay lẻ bằng cú pháp trên.

package main

import (  
    "fmt"
)

func main() {  
    if num := 10; num % 2 == 0 { //checks if number is even
        fmt.Println(num,"is even") 
    }  else {
        fmt.Println(num,"is odd")
    }
}

Chạy chương trình trong Playground

Trong chương trình trên num được khởi tạo trong câu lệnh if ở dòng số 8. Một điều cần lưu ý là num chỉ có sẵn để truy cập từ bên trong khối lệnh if else. Tức là phạm vi của biến num được giới hạn trong khối lệnh if else. Nếu chúng ta cố gắng truy cập num từ bên ngoài khối lệnh if hoặc else, trình biên dịch sẽ báo lỗi.

Cú pháp này thường có ích khi chúng ta khai báo một biến với mục đích chỉ sử dụng trong khối lệnh if else. Sử dụng cú pháp này trong những trường hợp như vậy đảm bảo rằng phạm vi của biến chỉ nằm trong câu lệnh if else.

Gotcha

Câu lệnh else phải bắt đầu trong cùng một dòng sau dấu ngoặc nhọn đóng } của câu lệnh if. Nếu không, trình biên dịch sẽ báo lỗi.

Hãy hiểu điều này bằng một chương trình.

package main

import (  
    "fmt"
)

func main() {  
    num := 10
    if num % 2 == 0 { //checks if number is even
        fmt.Println("the number is even") 
    }  
    else {
        fmt.Println("the number is odd")
    }
}

Chạy chương trình trong Playground

Trong chương trình trên, câu lệnh else không bắt đầu ở cùng một dòng sau dấu ngoặc nhọn } của câu lệnh if ở dòng số 11. Thay vào đó, nó bắt đầu ở dòng tiếp theo. Điều này không được phép trong Go. Nếu bạn chạy chương trình này, trình biên dịch sẽ xuất ra lỗi,

./prog.go:12:5: syntax error: unexpected else, expecting }

Nguyên nhân là do cách Go tự động chèn dấu chấm phẩy. Bạn có thể đọc về quy tắc chèn dấu chấm phẩy tại đây https://golang.org/ref/spec#Semicolons.

Trong các quy tắc, nó được chỉ định rằng một dấu chấm phẩy sẽ được chèn sau dấu ngoặc nhọn đóng }, nếu đó là mã thông báo cuối cùng của dòng. Vì vậy, một dấu chấm phẩy được tự động chèn vào sau dấu ngoặc nhọn đóng của câu lệnh if } ở dòng số 11 bởi trình biên dịch Go.

Vì vậy, chương trình của chúng tôi thực sự trở thành

...
if num%2 == 0 {  
      fmt.Println("the number is even") 
};  //semicolon inserted by Go Compiler
else {  
      fmt.Println("the number is odd")
}

sau khi chèn dấu chấm phẩy. Trình biên dịch sẽ chèn một dấu chấm phẩy ở dòng số 4 của đoạn mã trên.

if{...} else {...} là một câu lệnh duy nhất, nên không được xuất hiện dấu chấm phẩy ở giữa câu lệnh. Do đó chương trình này không biên dịch được. Do đó, yêu cầu về cú pháp là phải đặt else ở cùng một dòng sau dấu ngoặc nhọn đóng của câu lệnh if }.

Tôi đã viết lại chương trình bằng cách di chuyển lệnh else vào phía ký tự } của câu lệnh if để ngăn việc tự động chèn dấu chấm phẩy.

package main

import (  
    "fmt"
)

func main() {  
    num := 10
    if num%2 == 0 { //checks if number is even
        fmt.Println("the number is even") 
    } else {
        fmt.Println("the number is odd")
    }
}

Chạy chương trình trong Playground

Bây giờ trình biên dịch sẽ rất vui và chúng tôi cũng vậy 😃.

Triết lý viết mã trong Go

Chúng ta đã thấy nhiều cấu trúc if-else khác nhau và trên thực tế, chúng ta đã thấy nhiều cách để viết cùng một chương trình. Ví dụ, chúng ta đã thấy nhiều cách để viết một chương trình kiểm tra xem số đó là số chẵn hay lẻ bằng cách sử dụng các cấu trúc if else khác nhau.

Cách viết mã nào phổ biến trong Go?

Theo triết lý của Go, tốt hơn hết là bạn nên tránh các nhánh mã và thụt đầu dòng không cần thiết. Nó cũng được xem là tốt hơn để trả về càng sớm càng tốt.

Tôi đã cung cấp chương trình từ phần trước bên dưới,

package main

import (  
    "fmt"
)

func main() {  
    if num := 10; num % 2 == 0 { //checks if number is even
        fmt.Println(num,"is even") 
    }  else {
        fmt.Println(num,"is odd")
    }
}

Chạy chương trình trong Playground

Cách viết chương trình trên theo triết lý viết mã Go là tránh lệnh else và trả về sớm nếu điều kiện của lệnh if là đúng.

package main

import (  
    "fmt"
)

func main() {  
    num := 10;
    if num%2 == 0 { //checks if number is even
        fmt.Println(num, "is even")
        return
    }
    fmt.Println(num, "is odd")

}

Chạy chương trình trong Playground

Trong chương trình trên, ngay sau khi chúng ta tìm ra số chẵn, chúng ta trả về ngay lập tức. Điều này tránh nhánh mã khác không cần thiết. Đây là cách mọi thứ đang sử dụng trong Go 😃. Hãy ghi nhớ điều này bất cứ khi nào viết chương trình Go.

Ở hướng dẫn tiếp theo chúng ta sẽ tìm hiểu về vòng lặp for trong Go.

Lệnh vòng lặp trong Go
Trong hướng dẫn này chúng ta sẽ tìm hiểu về cách khai báo vòng lặp for, lệnh break, lệnh continue, nhãn, và các biến thể khác của vòng lặp for trong Go.

Tôi hy vọng bạn thích đọc và cảm ơn bạn đã đọc. Vui lòng để lại ý kiến ​​và phản hồi có giá trị của bạn.

Nếu Comdy hữu ích và giúp bạn tiết kiệm thời gian làm việc

Bạn có thể vui lòng đưa Comdy vào whitelist của trình chặn quảng cáo ❤️ để hỗ trợ chúng tôi trong việc trả tiền cho dịch vụ lưu trữ web để duy trì hoạt động của trang web.

Go
Bài Viết Liên Quan:
Phương thức (method) trong Go
Trung Nguyen 02/12/2021
Phương thức (method) trong Go

Trong hướng dẫn này, chúng ta sẽ tìm hiểu phương thức (method) trong Go là gì? Cú pháp khai báo phương thức, so sánh phương thức với hàm, ... trong Go.

Struct trong Go
Trung Nguyen 28/11/2021
Struct trong Go

Trong hướng dẫn này, chúng ta sẽ tìm hiểu struct là gì, cách khai báo và sử dụng một struct trong Go, struct ẩn danh, so sanh hai struct, ...

Con trỏ trong Go
Trung Nguyen 28/11/2021
Con trỏ trong Go

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách con trỏ (pointer) hoạt động trong Go và nó khác với con trỏ trong các ngôn ngữ khác như C và C++ như thế nào.

Chuỗi trong Go
Trung Nguyen 28/11/2021
Chuỗi trong Go

Chuỗi (string) xứng đáng được đề cập đặc biệt trong Go vì chúng khác biệt trong cách triển khai khi so sánh với các ngôn ngữ khác.