Método de retiro
Parte de la sección Object Oriented Programming del Journey de Lua de Coddy — lección 21 de 70.
Desafío
Fácil¡Tu Banco Digital está creciendo! Las cuentas ahora pueden recibir depósitos, pero un banco real también necesita permitir que los clientes retiren dinero. Vamos a añadir un método :withdraw(amount), pero con un control de seguridad importante.
A diferencia de los depósitos, los retiros pueden fallar. Si un cliente intenta retirar más dinero del que tiene, el banco no debería permitirlo. Tu método de retiro debe verificar si existen fondos suficientes antes de deducir la cantidad.
Continuarás trabajando con tus dos archivos:
Account.lua: Añade un método:withdraw(amount)a tu clase Account existente. Si la cuenta tiene saldo suficiente, resta la cantidad y devuelvetrue. Si no hay fondos suficientes, imprimeInsufficient fundsy devuelvefalsesin cambiar el saldo.main.lua: Crea una cuenta, realiza un depósito para darle algunos fondos, luego intenta varios retiros para ver tanto las transacciones exitosas como las fallidas.
Recibirás cuatro entradas:
- Monto del depósito inicial
- Monto del primer retiro
- Monto del segundo retiro
- Monto del tercer retiro
En tu archivo principal, crea una cuenta, deposita el monto inicial y luego intenta cada retiro en orden. Después de cada intento de retiro, imprime el saldo actual en una línea nueva. Recuerda que los retiros fallidos también imprimirán Insufficient funds antes de que imprimas el saldo.
Por ejemplo, si las entradas son 100, 30, 50 y 40, la salida debería ser:
70
20
Insufficient funds
20La cuenta comienza con 100 después del depósito. El primer retiro de 30 tiene éxito (saldo: 70), el segundo retiro de 50 tiene éxito (saldo: 20), pero el tercer retiro de 40 falla porque solo quedan 20, por lo que el saldo se mantiene en 20.
Pruébalo tú mismo
-- Requerir el módulo Account
local Account = require('Account')
-- Leer las cuatro entradas
local initialDeposit = tonumber(io.read())
local withdrawal1 = tonumber(io.read())
local withdrawal2 = tonumber(io.read())
local withdrawal3 = tonumber(io.read())
-- Crear una sola cuenta
local account = Account:new()
-- Depositar el monto inicial
account:deposit(initialDeposit)
-- Intentar el primer retiro y mostrar el saldo
-- TODO: llamar a account:withdraw(withdrawal1) aquí
print(account.balance)
-- Intentar el segundo retiro y mostrar el saldo
-- TODO: llamar a account:withdraw(withdrawal2) aquí
print(account.balance)
-- Intentar el tercer retiro y mostrar el saldo
-- TODO: llamar a account:withdraw(withdrawal3) aquí
print(account.balance)
Todas las lecciones de Object Oriented Programming
1El concepto de 'self'
Tablas con funciones'self' explícitoLa sintaxis de dos puntosPunto vs. dos puntosResumen - Punto en movimiento4Proyecto: Banco Digital
Configuración del proyectoMétodo de depósito2Patrón de prototipo de clase
El concepto de prototipoVinculación con __indexEl constructor :new()Inicialización de atributosInstancias independientesResumen - Fábrica de coches5Sobrecarga de operadores en POO
Sumar objetosRestar objetosConcatenar objetosComparar objetos (<, >)Resumen - Matemáticas de la billetera8Encapsulamiento
Convenciones de nomenclaturaClosures para privacidadAcceso mediante ClosuresTablas de solo lecturaLógica de validaciónResumen - Bóveda segura11Patrones de diseño (Lite)
Funciones FactoryTabla SingletonPatrón IteradorObserver (Listener)Resumen - Logger Factory3Estado y Comportamiento de los Objetos
Variables de InstanciaMétodos GetterMétodos SetterPropiedades CalculadasFormateo de StringsComprobaciones de IgualdadResumen - Calificación del Estudiante6Fundamentos de la herencia
Configuración de la herenciaHerencia de métodosExtender el constructorAñadir métodos hijosCompartido vs. ÚnicoResumen: Jerarquía de formas