Đây là bài hướng dẫn thứ tám trong series Hướng dẫn lập trình Golang cơ bản, trong bài này chúng ta sẽ nói về câu lệnh if else trong Golang.

 

if là câu lệnh điều kiện, cú pháp của nó như sau:

if condition {  
}

Nếu điều kiện là đúng (true), đoạn mã bên trong cặp dấu ngoặc móc { } sẽ được thực thi.

Không giống những ngôn ngữ khác như C, cặp dấu { } là bắt buộc ngay cả khi chỉ có một đoạn mã bên trong { }.

Câu lệnh if có thể có tùy chọn thêm các thành phần else ifelse.

if condition {  
} else if condition {
} else {
}
Trong khối lệnh có thể có một hoặc nhiều nhánh else if được sử dụng. Câu lệnh điều kiện sẽ thực thi từ trên xuống dưới đến khi thỏa mãn điều kiện đúng. Có nghĩa là, khi điều kiện trong câu lệnh if hay else if là đúng, khối lệnh tương ứng sẽ được thực thi, trường hợp không có điều kiện nào đúng, khối lệnh trong else sẽ được thực thi.

Chúng ta viết một ứng dụng xác định một số cho trước là chẵn hay lẻ.

package main

import (  
   "fmt"
)

func main() {  
   num := 10
   if num % 2 == 0 { // Kiểm tra xem có phải số chẵn hay không
       fmt.Println("the number is even")
   } else {
       fmt.Println("the number is odd")
   }
}

Câu lệnh if num % 2 == 0 kiểm tra phần dư của phép chia một số cho 2 có bằng 0 hay không. Nếu đúng, dòng chữ the number is even sẽ được in ra màn hình, ngược lại, dòng chữ the number is odd sẽ được in ra màn hình. Trong ứng dụng trên, chúng ta khai báo số nguyên là 10, kết quả sẽ in ra màn hình dòng chữ the number is even.

Có một biến thể khác của lệnh if, trong đó có thành phần câu lệnh (tùy chọn) được thực thi trước khi kiểm tra điều kiện. Cú pháp của nó như sau:

if statement; condition {  
}

Chúng ta viết lại ví dụ ban đầu bằng cách sử dụng cú pháp trên:

package main

import (  
   "fmt"
)

func main() {  
   if num := 10; num % 2 == 0 { // Kiểm tra xem có phải số chẵn hay không
       fmt.Println(num,"is even")
   } else {
       fmt.Println(num,"is odd")
   }
}

Run in playground

Trong ví dụ trên, biến num được khởi tạo trong câu lệnh if. Một điều cần lưu ý là biến num chỉ truy cập được bên trong câu lệnh ifelse. Cụ thể, phạm vi của biến num bị giới hạn trong khối lệnh if else. Nếu ta cố truy cập từ bên ngoài khối lệnh if else, trình biên dịch sẽ báo lỗi.

Viết một ứng dụng khác sử dụng lệnh else if:

package main

import (  
   "fmt"
)

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

Run in playground

Trong ví dụ trên, điều kiện else if num >= 51 && num <= 100 là đúng, do đó ứng dụng sẽ in ra dòng chữ number is between 51 and 100.

Giải thích

Câu lệnh else bắt buộc đứng ngay sau dấu móc ngoặc đóng } của lệnh điều kiện, nếu không, trình biên dịch sẽ báo lỗi.

Chúng ta sẽ phân tích theo ví dụ dưới đây:

package main

import (  
   "fmt"
)

func main() {  
   num := 10
   if num % 2 == 0 { // Kiểm tra xem có phải số chẵn hay không
       fmt.Println("the number is even")
   }
   else {
       fmt.Println("the number is odd")
   }
}

Run in playground

Trong ví dụ trên, lệnh else không nằm trên cùng một dòng với dấu móc ngoặc đóng }, thay vào đó, nó bắt đầu ở dòng tiếp theo. Điều này không cho phép trong ngôn ngữ Go. Nếu bạn chạy chương trình, trình biên dịch sẽ báo lỗi:

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

Nguyên nhân do cách mà ngôn ngữ Go chèn dấu ; là tự động. Vui lòng tham khảo nguyên tắc chèn dấu ; tại đây https://golang.org/ref/spec#Semicolons.

Theo nguyên tắc này, dấu ; sẽ được chèn ngay sau dấu }, nếu nó nằm ở cuối dòng. Do vậy dấu ; sẽ tự động được chèn ngay sau dấu } của lệnh điều kiện if.

Đoạn mã trên sau khi thêm dấu ; thực tế sẽ như sau:

if num%2 == 0 {  
     fmt.Println("the number is even")
};  // Dấu ; được chèn bởi Go
else {  
     fmt.Println("the number is odd")
}

Các bạn có thể thấy dấu ; được chèn tại dòng thứ 3 của đoạn mã.

Do if{...} else {...} là một khối lệnh, chúng ta không nên chèn dấu ; giữa khối lệnh này. Vì vậy, bắt buộc phải đặt else cùng một dòng ngay sau dấu }.

Ví dụ trên được viết lại sau khi di chuyển else ngay sau dấu } để ngăn việc tự động chèn dấu ; sau dấu } như sau:

package main

import (  
   "fmt"
)

func main() {  
   num := 10
   if num%2 == 0 { // Kiểm tra xem có phải số chẵn hay không
       fmt.Println("the number is even")
   } else {
       fmt.Println("the number is odd")
   }
}

Run in playground

Trình biên dịch sẽ chạy đoạn mã trên một cách "ngon lành" mà không gặp vấn đề gì.

Phần hướng dẫn về câu lệnh if else đến đây là kết thúc. Xin vui lòng để lại những ý kiến và phản hồi của các bạn.

Hẹn gặp lại trong bài học tiếp theo - Vòng lặp Loops.

Bài viết được dịch từ trang https://golangbot.com.