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: 20Cuố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 đó.
Thử thách
Người mớiTrong 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)
}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
4Toán tử so sánh và logic
Toán tử so sánh, phần 1Toán tử so sánh, phần 2Toán tử AND logicToán tử OR logicToán tử NOT logicCơ bản về thứ tự ưu tiên của toán tửÔn tập: thực hiện phép so sánh7Luồng điều khiển: vòng lặp
Giải thích vòng lặp `for`Vòng lặp `for` cơ bảnVòng lặp `for` chỉ có điều kiệnTừ khóa `break`Từ khóa `continue`Vòng lặp lồng nhauÔn tập: lặp lại hành động2Biến và các kiểu dữ liệu cơ bản
Biến là gìSuy luận kiểu với `:=`Số nguyên (int)Số dấu phẩy độngGiá trị BooleanChuỗiGiá trị 0Hằng sốQuy ước đặt tênÔn tập: biến và kiểu dữ liệu5Đầu vào/đầu ra cơ bản
Đầu ra có định dạngĐộng từ định dạngIn các kiểu dữ liệuNhận đầu vào cơ bản từ người dùngÔn tập: đầu vào và đầu ra8Hàm
Tìm hiểu về hàmKhai báo hàmGọi hàmTham số của hàmTrả về một giá trịTrả về nhiều giá trịGiá trị trả về có tênNhững điều cơ bản về phạm vi của hàmÔn tập: Tạo code có thể tái sử dụng3Toán tử cơ bản
Toán tử số họcToán tử chiaToán tử moduloToán tử gánToán tử gán kết hợpTăng và giảmÔn tập: Tính toán6Luồng điều khiển: câu lệnh điều kiện
Câu lệnh `if`Từ khóa `else`Từ khóa `else if`Biến bị che khuất trong `if`Khởi tạo biếnCâu lệnh `switch``switch` có biểu thức`switch` không có biểu thứcTừ khóa `fallthrough`Ôn tập: đưa ra quyết địnhTự luyện tập: Trình biên dịch Go online