Menu
Coddy logo textTech

Método de retiro

Parte de la sección Object Oriented Programming del Journey de Lua de Coddy — lección 21 de 70.

challenge icon

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 devuelve true. Si no hay fondos suficientes, imprime Insufficient funds y devuelve false sin 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:

  1. Monto del depósito inicial
  2. Monto del primer retiro
  3. Monto del segundo retiro
  4. 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
20

La 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