Метод снятия
Часть раздела Object Oriented Programming путешествия по Lua на Coddy — урок 21 из 70.
Задание
ЛегкоВаш Цифровой Банк растет! Счета теперь могут принимать депозиты, но настоящий банк также должен позволять клиентам снимать деньги. Давайте добавим метод :withdraw(amount) — но с важной проверкой безопасности.
В отличие от депозитов, снятие средств может не удаться. Если клиент пытается снять больше денег, чем у него есть, банк не должен этого позволять. Ваш метод снятия должен проверять наличие достаточного количества средств перед вычетом суммы.
Вы продолжите работу с вашими двумя файлами:
Account.lua: Добавьте метод:withdraw(amount)в ваш существующий класс Account. Если на счету достаточно средств, вычтите сумму и вернитеtrue. Если средств недостаточно, выведитеInsufficient fundsи вернитеfalse, не изменяя баланс.main.lua: Создайте счет, внесите депозит, чтобы на нем появились средства, а затем попытайтесь совершить несколько снятий, чтобы увидеть как успешные, так и неудачные транзакции.
Вы получите четыре входных значения:
- Сумма начального депозита
- Сумма первого снятия
- Сумма второго снятия
- Сумма третьего снятия
В вашем основном файле создайте счет, внесите начальную сумму, а затем попытайтесь выполнить каждое снятие по порядку. После каждой попытки снятия выводите текущий баланс на новой строке. Помните, что при неудачных попытках снятия также будет выводиться Insufficient funds перед тем, как вы напечатаете баланс.
Например, если входные данные — 100, 30, 50 и 40, вывод должен быть следующим:
70
20
Insufficient funds
20После депозита на счету оказывается 100. Первое снятие 30 проходит успешно (баланс: 70), второе снятие 50 проходит успешно (баланс: 20), но третье снятие 40 не удается, так как осталось всего 20 — поэтому баланс остается равным 20.
Попробуйте сами
-- Подключить модуль Account
local Account = require('Account')
-- Прочитать четыре входных значения
local initialDeposit = tonumber(io.read())
local withdrawal1 = tonumber(io.read())
local withdrawal2 = tonumber(io.read())
local withdrawal3 = tonumber(io.read())
-- Создать один аккаунт
local account = Account:new()
-- Внести начальную сумму
account:deposit(initialDeposit)
-- Попытаться выполнить первое снятие и вывести баланс
-- TODO: вызвать account:withdraw(withdrawal1) здесь
print(account.balance)
-- Попытаться выполнить второе снятие и вывести баланс
-- TODO: вызвать account:withdraw(withdrawal2) здесь
print(account.balance)
-- Попытаться выполнить третье снятие и вывести баланс
-- TODO: вызвать account:withdraw(withdrawal3) здесь
print(account.balance)
Все уроки раздела Object Oriented Programming
1Концепция 'self'
Таблицы с функциямиЯвный 'self'Синтаксис с двоеточиемТочка против двоеточияИтоги — Движущаяся точка4Проект: Цифровой банк
Настройка проектаМетод пополнения7Полиморфизм и переопределение
Переопределение методовВызов родительских методовУтиная типизацияОбщий интерфейсПроверка типаИтоги — Роли сотрудников2Паттерн прототипа класса
Концепция прототипаСвязывание через __indexКонструктор :new()Инициализация атрибутовНезависимые экземплярыИтоги — Автозавод5Перегрузка операторов в ООП
Сложение объектовВычитание объектовКонкатенация объектовСравнение объектов (<, >)Повторение — Математика кошелька8Инкапсуляция
Соглашения об именованииЗамыкания для приватностиДоступ через замыканияТаблицы только для чтенияЛогика валидацииИтоги — Защищенное хранилище11Паттерны проектирования (Lite)
Фабричные функцииТаблица SingletonПаттерн IteratorObserver (Слушатель)Итоги — Logger Factory3Состояние и поведение объектов
Переменные экземпляраГеттерыСеттерыВычисляемые свойстваФорматирование строкПроверка на равенствоПовторение — Оценка студента6Основы наследования
Настройка наследованияНаследование методовРасширение конструктораДобавление дочерних методовОбщее и уникальноеИтоги: Иерархия фигур