Menu
CoddyTech

Cú pháp dấu hai chấm

Thuộc phần Lập trình hướng đối tượng trong hành trình Lua của Coddy. Bài học 3 trên 70.

Viết counter.increment(counter) mỗi lần thật tẻ nhạt và dễ mắc lỗi. Lua cung cấp một cách gọn gàng hơn: toán tử dấu hai chấm (:).

Khi định nghĩa hàm bằng dấu hai chấm, Lua tự động thêm self làm tham số đầu tiên:

local player = {
    name = "Hero"
}

-- Dùng dấu hai chấm khi định nghĩa hàm
function player:greet()
    print("Hello, I am " .. self.name)
end

Dấu hai chấm cũng dùng được khi gọi hàm. Nó tự động truyền bảng làm đối số đầu tiên:

player:greet()  -- Đầu ra: Hello, I am Hero

Cách này tương đương với việc viết player.greet(player), nhưng gọn hơn nhiều. Dấu hai chấm xử lý tham số self ở cả hai đầu: khi định nghĩa và khi gọi hàm.

Đây là phần so sánh cho thấy cả hai cách đều tạo ra kết quả giống hệt nhau:

local counter = { value = 0 }

-- Cú pháp dấu chấm (truyền self tường minh)
function counter.increment(self)
    self.value = self.value + 1
end
counter.increment(counter)

-- Cú pháp dấu hai chấm (tự động truyền self)
function counter:decrement()
    self.value = self.value - 1
end
counter:decrement()

Cú pháp dấu hai chấm là cách tiêu chuẩn để định nghĩa và gọi phương thức trong Lua. Cách này giúp code của bạn ngắn gọn hơn và bớt lặp lại.

challenge icon

Thử thách

Dễ

Tạo một bảng (table) tên là greeter với trường message được khởi tạo bằng giá trị bạn nhận làm đầu vào.

Thêm phương thức :sayHello(name) bằng cú pháp dấu hai chấm (colon syntax) để in lời chào theo định dạng sau:

[message], [name]!

Bạn sẽ nhận hai đầu vào:

  1. Lời chào để lưu vào greeter.message
  2. Tên để truyền vào phương thức :sayHello()

Định nghĩa phương thức bằng cú pháp dấu hai chấm và gọi phương thức cũng bằng cú pháp dấu hai chấm. In lời chào theo định dạng đã cho.

Ví dụ: nếu lời chào là Welcome và tên là Luna, đầu ra sẽ là:

Welcome, Luna!

Tự làm thử

-- Đọc đầu vào
local message = io.read()
local name = io.read()

-- TODO: Viết code của bạn bên dưới
-- 1. Tạo một bảng tên là 'greeter' với trường 'message'
-- 2. Thêm phương thức (method) :sayHello(name) bằng cú pháp (syntax) dấu hai chấm
-- 3. Gọi phương thức bằng cú pháp dấu hai chấm để in ra lời chào
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 Lập trình hướng đối tượng

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