Menu
Coddy logo textTech

Método de retiro

Parte de la sección Programación Orientada a Objetos 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. Añadamos un método :withdraw(amount), pero con una comprobación 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 withdraw debe comprobar si hay fondos suficientes antes de deducir el importe.

Seguirá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 el importe 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 proporcionarle fondos y, después, intenta varios retiros para ver transacciones exitosas y fallidas.

Recibirás cuatro entradas:

  1. Importe del depósito inicial
  2. Importe del primer retiro
  3. Importe del segundo retiro
  4. Importe del tercer retiro

En tu archivo principal, crea una cuenta, deposita el importe inicial y, después, 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 se realiza correctamente (saldo: 70), el segundo retiro de 50 se realiza correctamente (saldo: 20), pero el tercer retiro de 40 falla porque solo quedan 20, por lo que el saldo permanece en 20.

Pruébalo tú mismo

-- Requiere el módulo Account
local Account = require('Account')

-- Lee las cuatro entradas
local initialDeposit = tonumber(io.read())
local withdrawal1 = tonumber(io.read())
local withdrawal2 = tonumber(io.read())
local withdrawal3 = tonumber(io.read())

-- Crea una sola cuenta
local account = Account:new()

-- Deposita la cantidad inicial
account:deposit(initialDeposit)

-- Intenta el primer retiro e imprime el saldo
-- TODO: llama a account:withdraw(withdrawal1) aquí
print(account.balance)

-- Intenta el segundo retiro e imprime el saldo
-- TODO: llama a account:withdraw(withdrawal2) aquí
print(account.balance)

-- Intenta el tercer retiro e imprime el saldo
-- TODO: llama a account:withdraw(withdrawal3) aquí
print(account.balance)

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de Lua online