Menu
Coddy logo textTech

Transferir Fundos

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

challenge icon

Desafio

Fácil

Seu Banco Digital está quase completo! O último grande recurso é a capacidade de transferir dinheiro entre contas. É aqui que seu design orientado a objetos realmente brilha — um objeto de conta pode interagir diretamente com outro objeto de conta.

Você adicionará um método :transfer(targetAccount, amount) que move dinheiro de uma conta para outra. Pense no que essa operação realmente envolve: é uma retirada da conta de origem seguida por um depósito na conta de destino. A beleza é que você pode reutilizar os métodos que já construiu!

Continue construindo sobre seus arquivos existentes:

  • Account.lua: Adicione um método :transfer(targetAccount, amount) à sua classe Account. Este método deve tentar retirar o valor de self e, se for bem-sucedido, depositar esse valor na targetAccount. Se a retirada falhar (fundos insuficientes), a transferência não deve ocorrer. Mantenha toda a sua funcionalidade existente (construtor com ID, deposit, withdraw, getBalance e __tostring).
  • main.lua: Crie múltiplas contas e demonstre transferências entre elas, mostrando como os saldos mudam em diferentes objetos de conta.

Você receberá cinco entradas:

  1. ID da primeira conta
  2. ID da segunda conta
  3. Depósito inicial na primeira conta
  4. Valor da primeira transferência (da conta 1 para a conta 2)
  5. Valor da segunda transferência (da conta 1 para a conta 2)

No seu arquivo principal, crie duas contas com os IDs fornecidos (ambas começando com saldo 0), deposite o valor inicial na primeira conta e, em seguida, tente ambas as transferências da primeira conta para a segunda. Após cada tentativa de transferência, imprima ambas as contas (o __tostring mostrará o estado atual delas).

Por exemplo, se as entradas forem 101, 102, 500, 200 e 400, a saída deve ser:

Account [101]: Balance = 300
Account [102]: Balance = 200
Insufficient funds
Account [101]: Balance = 300
Account [102]: Balance = 200

A primeira conta começa com 500 após o depósito. A primeira transferência de 200 é bem-sucedida, deixando a conta 101 com 300 e a conta 102 com 200. A segunda transferência de 400 falha porque a conta 101 tem apenas 300 — portanto, ambos os saldos permanecem inalterados.

Experimente você mesmo

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

-- Lê as cinco entradas
local id1 = io.read()
local id2 = io.read()
local initialDeposit = tonumber(io.read())
local transfer1 = tonumber(io.read())
local transfer2 = tonumber(io.read())

-- Cria duas contas com IDs
local account1 = Account:new(id1)
local account2 = Account:new(id2)

-- Deposita o valor inicial na primeira conta
account1:deposit(initialDeposit)

-- TODO: Tentar a primeira transferência da account1 para a account2

-- TODO: Imprimir ambas as contas após a primeira transferência

-- TODO: Tentar a segunda transferência da account1 para a account2

-- TODO: Imprimir ambas as contas após a segunda transferência

Todas as lições de Object Oriented Programming