Menu
Coddy logo textTech

Método de Saque

Parte da seção Object Oriented Programming do Journey de Lua da Coddy — lição 21 de 70.

challenge icon

Desafio

Fácil

Seu Banco Digital está crescendo! As contas agora podem receber depósitos, mas um banco real também precisa permitir que os clientes retirem dinheiro. Vamos adicionar um método :withdraw(amount)—mas com uma verificação de segurança importante.

Diferente dos depósitos, os saques podem falhar. Se um cliente tentar sacar mais dinheiro do que possui, o banco não deve permitir. Seu método de saque precisa verificar se existem fundos suficientes antes de deduzir o valor.

Você continuará trabalhando com seus dois arquivos:

  • Account.lua: Adicione um método :withdraw(amount) à sua classe Account existente. Se a conta tiver saldo suficiente, subtraia o valor e retorne true. Se não houver fundos suficientes, imprima Insufficient funds e retorne false sem alterar o saldo.
  • main.lua: Crie uma conta, faça um depósito para dar alguns fundos a ela e, em seguida, tente vários saques para ver tanto transações bem-sucedidas quanto falhas.

Você receberá quatro entradas:

  1. Valor do depósito inicial
  2. Valor do primeiro saque
  3. Valor do segundo saque
  4. Valor do terceiro saque

Em seu arquivo principal, crie uma conta, deposite o valor inicial e, em seguida, tente cada saque em ordem. Após cada tentativa de saque, imprima o saldo atual em uma nova linha. Lembre-se de que saques que falharem também imprimirão Insufficient funds antes de você imprimir o saldo.

Por exemplo, se as entradas forem 100, 30, 50 e 40, a saída deve ser:

70
20
Insufficient funds
20

A conta começa com 100 após o depósito. O primeiro saque de 30 é bem-sucedido (saldo: 70), o segundo saque de 50 é bem-sucedido (saldo: 20), mas o terceiro saque de 40 falha porque restam apenas 20—então o saldo permanece em 20.

Experimente você mesmo

-- Requer o módulo Account
local Account = require('Account')

-- Lê as quatro entradas
local initialDeposit = tonumber(io.read())
local withdrawal1 = tonumber(io.read())
local withdrawal2 = tonumber(io.read())
local withdrawal3 = tonumber(io.read())

-- Cria uma única conta
local account = Account:new()

-- Deposita o valor inicial
account:deposit(initialDeposit)

-- Tenta o primeiro saque e imprime o saldo
-- TODO: chamar account:withdraw(withdrawal1) aqui
print(account.balance)

-- Tenta o segundo saque e imprime o saldo
-- TODO: chamar account:withdraw(withdrawal2) aqui
print(account.balance)

-- Tenta o terceiro saque e imprime o saldo
-- TODO: chamar account:withdraw(withdrawal3) aqui
print(account.balance)

Todas as lições de Object Oriented Programming