資金移動
CoddyのLuaジャーニー「Object Oriented Programming」セクションの一部 — レッスン 24/70。
チャレンジ
簡単あなたのデジタルバンクはほぼ完成です!最後の主要な機能は、アカウント間で送金を行う機能です。ここで、あなたのオブジェクト指向設計が真価を発揮します。あるアカウントオブジェクトが別のアカウントオブジェクトと直接やり取りできるようになります。
:transfer(targetAccount, amount) メソッドを追加して、あるアカウントから別のアカウントへお金を移動させます。この操作に何が含まれるか考えてみてください。それは、送金元のアカウントからの引き出しと、それに続く送金先のアカウントへの預け入れです。素晴らしいのは、すでに作成したメソッドを再利用できることです!
既存のファイルをベースに構築を続けてください:
Account.lua: Account クラスに:transfer(targetAccount, amount)メソッドを追加します。このメソッドはselfから金額を引き出そうとし、成功した場合はその金額をtargetAccountに預け入れます。引き出しに失敗した場合(残高不足)、送金は行われません。既存のすべての機能(ID付きのコンストラクタ、deposit、withdraw、getBalance、および __tostring)を保持してください。main.lua: 複数のアカウントを作成し、それらの間での送金を実演して、異なるアカウントオブジェクト間で残高がどのように変化するかを示します。
5つの入力を受け取ります:
- 1つ目のアカウントのID
- 2つ目のアカウントのID
- 1つ目のアカウントへの初期預金額
- 1回目の送金額(アカウント1からアカウント2へ)
- 2回目の送金額(アカウント1からアカウント2へ)
メインファイルで、指定されたIDを持つ2つのアカウントを作成し(両方とも残高0から開始)、初期金額を1つ目のアカウントに預け入れ、その後、1つ目のアカウントから2つ目のアカウントへ2回の送金を試みます。各送金の試行後、両方のアカウントを出力してください(__tostring が現在の状態を表示します)。
例えば、入力が 101, 102, 500, 200, 400 の場合、出力は以下のようになります:
Account [101]: Balance = 300
Account [102]: Balance = 200
Insufficient funds
Account [101]: Balance = 300
Account [102]: Balance = 2001つ目のアカウントは預け入れ後に500から始まります。200の最初の送金は成功し、アカウント 101 の残高は 300、アカウント 102 の残高は 200 になります。2回目の 400 の送金は、アカウント 101 に 300 しかないため失敗します。そのため、両方の残高は変更されません。
自分で試してみよう
-- Accountモジュールを読み込む
local Account = require('Account')
-- 5つの入力を読み込む
local id1 = io.read()
local id2 = io.read()
local initialDeposit = tonumber(io.read())
local transfer1 = tonumber(io.read())
local transfer2 = tonumber(io.read())
-- IDを使用して2つのアカウントを作成する
local account1 = Account:new(id1)
local account2 = Account:new(id2)
-- 最初のアカウントに初期金額を入金する
account1:deposit(initialDeposit)
-- TODO: account1からaccount2への最初の送金を試みる
-- TODO: 最初の送金後の両方のアカウントを表示する
-- TODO: account1からaccount2への2回目の送金を試みる
-- TODO: 2回目の送金後の両方のアカウントを表示する