Метод снятия
Часть раздела Объектно-ориентированное программирование путешествия по Lua на Coddy. Урок 21 из 70.
Задание
ЛегкоВаш Digital Bank растёт! Теперь счета могут получать депозиты, но настоящему банку также нужно позволять клиентам снимать деньги. Давайте добавим метод :withdraw(amount), но с важной проверкой безопасности.
В отличие от депозитов, снятие средств может завершиться неудачей. Если клиент пытается снять больше денег, чем у него есть, банк не должен этого позволять. Ваш метод withdraw должен проверить, достаточно ли средств, прежде чем вычитать сумму.
Вы продолжите работать с двумя файлами:
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)
Все уроки раздела Объектно-ориентированное программирование
1Концепция 'self'
Таблицы с функциямиЯвный 'self'Синтаксис с двоеточиемТочка против двоеточияИтоги — Движущаяся точка4Проект: Цифровой банк
Настройка проектаМетод пополнения7Полиморфизм и переопределение
Переопределение методовВызов родительских методовУтиная типизацияОбщий интерфейсПроверка типаИтоги — Роли сотрудников2Паттерн прототипа класса
Концепция прототипаСвязывание через __indexКонструктор :new()Инициализация атрибутовНезависимые экземплярыИтоги — Автозавод5Перегрузка операторов в ООП
Сложение объектовВычитание объектовКонкатенация объектовСравнение объектов (<, >)Повторение — Математика кошелька8Инкапсуляция
Соглашения об именованииЗамыкания для приватностиДоступ через замыканияТаблицы только для чтенияЛогика валидацииИтоги — Защищенное хранилище11Паттерны проектирования (Lite)
Фабричные функцииТаблица SingletonПаттерн IteratorObserver (Слушатель)Итоги — Logger Factory3Состояние и поведение объектов
Переменные экземпляраГеттерыСеттерыВычисляемые свойстваФорматирование строкПроверка на равенствоПовторение — Оценка студента6Основы наследования
Настройка наследованияНаследование методовРасширение конструктораДобавление дочерних методовОбщее и уникальноеИтоги: Иерархия фигурПотренируйтесь самостоятельно: Онлайн-компилятор Lua