Ôn tập: phép tính với ví tiền
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 30 trên 70.
Thử thách
DễHãy tạo lớp Wallet để kết hợp các kỹ năng nạp chồng toán tử mà bạn đã học trong chương này. Ví sẽ lưu một số tiền và hỗ trợ hai thao tác chính: gộp các ví bằng + và so sánh các ví bằng < và >.
Bạn sẽ sắp xếp code trong hai tệp:
Wallet.lua: Định nghĩa lớp Wallet với trườngamountbiểu thị số tiền trong ví. Thêm hàm khởi tạo:new(amount)và triển khai hai metamethod:__add: Cộng hai ví sẽ tạo một ví mới chứa tổng số tiền__lt: So sánh hai ví để xác định ví nào có ít tiền hơn
main.lua: Nạp module Wallet, tạo các instance ví và minh họa cách hai thao tác phối hợp với nhau.
Bạn sẽ nhận ba đầu vào:
- Số tiền trong ví thứ nhất
- Số tiền trong ví thứ hai
- Số tiền trong ví thứ ba
Trong tệp chính, hãy tạo ba ví với số tiền đã cho. Sau đó:
- Cộng ví thứ nhất và ví thứ hai để tạo một ví gộp
- In số tiền trong ví gộp
- So sánh ví gộp với ví thứ ba bằng
<và in kết quả (truehoặcfalse) - So sánh ví gộp với ví thứ ba bằng
>và in kết quả (truehoặcfalse)
Ví dụ, nếu đầu vào là 50, 30 và 100, đầu ra sẽ là:
80
true
falseVí thứ nhất (50) cộng với ví thứ hai (30) tạo thành ví gộp có 80. Vì 80 nhỏ hơn 100 nên phép so sánh thứ nhất cho kết quả true. Vì 80 không lớn hơn 100 nên phép so sánh thứ hai cho kết quả false.
Tự làm thử
local Wallet = require('Wallet')
-- Đọc đầu vào
local amount1 = tonumber(io.read())
local amount2 = tonumber(io.read())
local amount3 = tonumber(io.read())
-- TODO: Tạo ba ví với số tiền đã cho
-- TODO: Cộng ví thứ nhất và ví thứ hai để tạo ví gộp
-- TODO: In ra số tiền trong ví gộp
-- TODO: Dùng < để so sánh ví gộp với ví thứ ba rồi in ra kết quả
-- TODO: Dùng > để so sánh ví gộp với ví thứ ba rồi in ra kết quả
Tất cả bài học trong Lập trình hướng đối tượng
1Khái niệm “self”
Bảng với hàm“self” tường minhCú pháp dấu hai chấmDấu chấm và dấu hai chấmÔn tập: Điểm chuyển động4Dự án: Ngân hàng số
Thiết lập dự ánPhương thức nạp tiền2Mẫu Prototype cho lớp
Khái niệm PrototypeLiên kết bằng __indexHàm khởi tạo :new()Khởi tạo thuộc tínhCác instance độc lậpÔn tập: Nhà máy ô tô5Nạp chồng toán tử trong OOP
Cộng các đối tượngTrừ các đối tượngNối các đối tượngSo sánh các đối tượng (<, >)Ôn tập: phép tính với ví tiền8Đóng gói
Quy ước đặt tênClosure để bảo mậtTruy cập qua closureBảng chỉ đọcLogic kiểm tra hợp lệTổng kết: Két an toàn11Mẫu thiết kế (cơ bản)
Hàm tạo đối tượngBảng SingletonMẫu IteratorObserver (Listener)Ôn tập: Factory Logger3Trạng thái và hành vi của đối tượng
Biến instancePhương thức getterPhương thức setterThuộc tính tính toánĐịnh dạng chuỗiKiểm tra tính bằng nhauÔn tập: điểm số học sinh6Cơ bản về kế thừa
Thiết lập kế thừaKế thừa phương thứcMở rộng hàm khởi tạoThêm phương thức cho lớp conDùng chung và riêngÔn tập: hệ phân cấp hình dạngTự luyện tập: Trình biên dịch Lua online