Phương thức rút 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 21 trên 70.
Thử thách
DễNgân hàng số của bạn đang phát triển! Giờ đây, các tài khoản có thể nhận tiền gửi, nhưng một ngân hàng thực sự cũng cần cho phép khách hàng rút tiền. Hãy thêm phương thức (method) :withdraw(amount), kèm theo một bước kiểm tra an toàn quan trọng.
Khác với gửi tiền, rút tiền có thể thất bại. Nếu khách hàng cố rút nhiều tiền hơn số tiền họ có, ngân hàng không nên cho phép. Phương thức rút tiền cần kiểm tra xem tài khoản có đủ tiền hay không trước khi trừ số tiền đó.
Bạn sẽ tiếp tục làm việc với hai tệp:
Account.lua: Thêm phương thức:withdraw(amount)vào lớp Account hiện có. Nếu tài khoản có đủ số dư, hãy trừ số tiền đó rồi trả vềtrue. Nếu không đủ tiền, hãy in raInsufficient fundsrồi trả vềfalsemà không thay đổi số dư.main.lua: Tạo một tài khoản, gửi tiền vào để tài khoản có tiền, sau đó thử rút tiền vài lần để xem cả giao dịch thành công lẫn thất bại.
Bạn sẽ nhận bốn đầu vào:
- Số tiền gửi ban đầu
- Số tiền rút lần thứ nhất
- Số tiền rút lần thứ hai
- Số tiền rút lần thứ ba
Trong tệp chính, hãy tạo một tài khoản, gửi số tiền ban đầu vào, rồi thử từng lần rút theo thứ tự. Sau mỗi lần thử rút, hãy in số dư hiện tại trên một dòng mới. Nhớ rằng những lần rút thất bại cũng sẽ in ra Insufficient funds trước khi bạn in số dư.
Ví dụ, nếu đầu vào là 100, 30, 50 và 40, đầu ra sẽ là:
70
20
Insufficient funds
20Tài khoản bắt đầu có 100 sau khi gửi tiền. Lần rút thứ nhất, 30, thành công (số dư: 70); lần rút thứ hai, 50, cũng thành công (số dư: 20), nhưng lần rút thứ ba, 40, thất bại vì chỉ còn 20, nên số dư vẫn là 20.
Tự làm thử
-- Nạp module Account
local Account = require('Account')
-- Đọc bốn giá trị đầu vào
local initialDeposit = tonumber(io.read())
local withdrawal1 = tonumber(io.read())
local withdrawal2 = tonumber(io.read())
local withdrawal3 = tonumber(io.read())
-- Tạo một tài khoản
local account = Account:new()
-- Nạp số tiền ban đầu
account:deposit(initialDeposit)
-- Thử rút tiền lần đầu và in ra số dư
-- TODO: gọi account:withdraw(withdrawal1) tại đây
print(account.balance)
-- Thử rút tiền lần hai và in ra số dư
-- TODO: gọi account:withdraw(withdrawal2) tại đây
print(account.balance)
-- Thử rút tiền lần ba và in ra số dư
-- TODO: gọi account:withdraw(withdrawal3) tại đây
print(account.balance)
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