Phạm vi và khối lệnh
Thuộc phần Nền tảng cơ bản trong hành trình Lua của Coddy. Bài học 86 trên 90.
Trong Lua, bạn có thể tạo phạm vi mới ở bất cứ đâu trong code bằng các khối do...end. Những khối này giúp bạn kiểm soát chính xác nơi có thể truy cập các biến cục bộ, nhờ đó bạn kiểm soát phạm vi của biến (variable) một cách chính xác.
Sau đây là cách tạo một phạm vi mới bằng khối do...end:
local outerVar = "I'm outside"
do
local innerVar = "I'm inside"
print(outerVar) -- Lệnh này chạy được
print(innerVar) -- Lệnh này cũng chạy được
end
print(outerVar) -- Lệnh này chạy được
print(innerVar) -- In ra nil: innerVar chỉ tồn tại trong khối lệnhĐiểm mạnh của phạm vi là bạn có thể dùng các biến cục bộ cùng tên trong những khối lệnh khác nhau, và chúng hoàn toàn tách biệt:
local name = "Alice"
do
local name = "Bob" -- Biến (variable) khác!
print(name) -- In ra "Bob"
end
print(name) -- In ra "Alice"Mỗi khối do...end tạo ra một môi trường riêng biệt cho các biến cục bộ. Các biến được khai báo bên trong một khối không thể thoát ra phạm vi bên ngoài, trong khi các biến thuộc phạm vi bên ngoài có thể được truy cập từ bên trong các khối lồng nhau.
Thử thách
DễTạo các khối do...end lồng nhau để cho thấy các biến cục bộ cùng tên vẫn hoàn toàn tách biệt trong các phạm vi khác nhau.
Trước tiên, tạo một biến cục bộ tên là playerLevel có giá trị 10 trong phạm vi bên ngoài và in ra biến đó.
Sau đó, tạo một khối do...end và bên trong khối này:
- Khai báo một biến cục bộ mới cũng tên là
playerLevelcó giá trị25 - In ra biến
playerLevelbên trong
Sau khi khối bên trong kết thúc, in lại biến playerLevel bên ngoài để cho thấy giá trị của biến vẫn không đổi.
Điều này cho thấy các biến cục bộ trùng tên trong các phạm vi khác nhau hoàn toàn độc lập với nhau, biến bên trong không ảnh hưởng đến biến bên ngoài.
Tự làm thử
-- TODO: Viết code vào đâyBà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 Nền tảng cơ bản
4Toán tử 2: quan hệ và logic
Toán tử bằngToán tử quan hệToán tử andToán tử orToán tử notĐánh giá ngắn mạchGiá trị truthy và falsyÔn tập: logic đơn giản10Bảng phần 1: kiểu danh sách
Bảng là gì?Tạo bảngTruy cập phần tử theo chỉ sốSửa đổi phần tử theo chỉ sốToán tử độ dài '#'table.insert()table.remove()Ôn tập: quản lý thành viên nhóm13Dự án: Cửa hàng thuốc đơn giản
Thiết lập dự ánThêm một loại thuốc2Biến và kiểu dữ liệu
Biến là gì?Các sốChuỗiGiá trị BooleanGiá trị 'nil'Hàm type()Quy ước đặt tênÔn tập: hồ sơ nhân vật5Đầu ra cơ bản
In các giá trị cố địnhIn biếnIn nhiều giá trịKết hợp chuỗi và biếnHàm tostring()Đầu vàoÉp kiểuÔn tập: Báo cáo trạng tháiÔn tập: Đến 1208Cơ bản về thao tác với chuỗi
string.len()string.upper & string.lowerstring.sub()string.rep()string.find()Ôn tập: định dạng tên người dùng11Bảng 2: kiểu từ điển
Cặp khóa-giá trịTạo bảng kiểu từ điểnTruy cập bằng ký hiệu ngoặc vuôngTruy cập bằng ký hiệu dấu chấmThêm và sửa đổi các cặpXóa các cặp bằng nilÔn tập: thuộc tính của phần tử14Phạm vi biến
Biến toàn cụcBiến cục bộVì sao dùng biến cục bộ?Phạm vi và khối lệnhÔn tập: câu đố về phạm vi3Toán tử 1: số học và nối chuỗi
Toán tử số họcToán tử chia lấy dưToán tử lũy thừaNối chuỗiThứ tự ưu tiên của toán tửÔn tập: phép tính đơn giản6Dự án: Hiển thị chỉ số nhân vật
Lời chào mừngKhai báo chỉ số nhân vật9Cơ bản về hàm
Khai báo hàmGọi hàmHàm có tham sốHàm có nhiều tham sốCâu lệnh returnÔn tập: Máy tính diện tíchTự luyện tập: Trình biên dịch Lua online