Menu
CoddyTech

Biến bị che khuất trong `if`

Thuộc phần Kiến thức nền tảng trong hành trình GO của Coddy. Bài học 37 trên 109.

Hãy cùng tìm hiểu về hiện tượng che khuất biến trong các câu lệnh if. Một câu lệnh if có thể khai báo một biến trước điều kiện của nó, và biến đó chỉ tồn tại bên trong khối lệnh if cùng các khối lệnh else liên quan. Nếu biến đó có cùng tên với một biến bên ngoài câu lệnh if, nó sẽ che khuất biến bên ngoài trong các khối lệnh đó.

Đầu tiên, hãy tạo một biến bên ngoài câu lệnh điều kiện:

x := 10
fmt.Println("Original x value:", x)

Sau khi chạy đoạn code này, chúng ta sẽ có biến x với giá trị 10 để dùng trong toàn bộ chương trình.

Bây giờ, hãy khai báo biến mới y trong câu lệnh if. Biến này chỉ tồn tại trong khối lệnh if và else:

if y := x * 2; y > 15 {
    fmt.Println("y is greater than 15:", y)
    // y chỉ tồn tại trong khối lệnh này
} else {
    fmt.Println("y is not greater than 15:", y)
    // y cũng có thể dùng trong các khối lệnh else
}

Sau khi chạy đoạn code này, Go sẽ tính y bằng 20 (tức là x * 2), kiểm tra xem giá trị đó có lớn hơn 15 không, rồi chạy khối lệnh đầu tiên. Kết quả sẽ hiển thị trên màn hình:

y is greater than 15: 20

Cuối cùng, hãy thử truy cập các biến sau câu lệnh if:

// fmt.Println(y) sẽ gây lỗi vì y không tồn tại ở đây
fmt.Println("x is still:", x)

Sau khi chạy đoạn code này, chúng ta vẫn có thể truy cập x, nhưng y không còn khả dụng vì nó chỉ tồn tại bên trong các khối lệnh if và else. Kết quả sẽ hiển thị trên màn hình:

x is still: 10

Điều này minh họa phạm vi của một biến được khai báo trong câu lệnh if: biến y chỉ có thể được truy cập bên trong các khối điều kiện nơi nó được khai báo. Không có y bên ngoài, nên ở đây không có biến nào bị che khuất. Nếu thay vào đó, ta đặt tên biến là x, nó sẽ che khuất x bên ngoài trong các khối đó, và x bên ngoài vẫn có giá trị 10 sau khi thoát khỏi các khối đó.

challenge icon

Thử thách

Người mới

Trong thử thách này, bạn sẽ luyện tập cách che khuất biến trong câu lệnh if. Bạn sẽ thấy một biến được khai báo bên trong khối lệnh if có thể trùng tên với một biến trong phạm vi bên ngoài nhưng có giá trị khác.

Đoạn code có một biến message trong phạm vi bên ngoài. Nhiệm vụ của bạn là tạo một biến bị che khuất có cùng tên bên trong khối lệnh if, sau đó in ra cả hai biến để xem hiệu ứng che khuất.

Tự làm thử

package main

import "fmt"

func main() {
	// Biến ở phạm vi (scope) bên ngoài
	message := "Hello from outer scope"
	
	isLoggedIn := true
	
	if isLoggedIn {
		// TODO: Tạo biến (variable) mới tên là 'message' với giá trị (value) "Hello from inner scope"
		
		// Lệnh này in ra thông điệp ở phạm vi bên trong
		fmt.Println(message)
	}
	
	// Lệnh này in ra thông điệp ở phạm vi bên ngoài
	fmt.Println(message)
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Trình biên dịch Go online