資金移動
CoddyのLuaジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 24/70。
チャレンジ
簡単あなたのデジタル銀行はほぼ完成です!最後の主要な機能は、account 間でお金を transfer する機能です。ここでオブジェクト指向設計の真価が発揮されます。ある account オブジェクトが、別の account オブジェクトと直接やり取りできるのです。
:transfer(targetAccount, amount) メソッドを追加して、ある account から別の account へお金を移動します。この操作に実際に何が含まれるか考えてみましょう。これは、source account からの引き出しに続いて、target account への預け入れを行うものです。すでに作成したメソッドを再利用できるのが、この設計の魅力です!
既存のファイルを引き続き構築してください:
Account.lua:Account class に:transfer(targetAccount, amount)メソッドを追加します。このメソッドはselfから amount を引き出そうとし、successful であれば、その amount をtargetAccountに預け入れる必要があります。引き出しに失敗した場合(Insufficient funds)、transfer は実行されません。既存のすべての機能(ID を受け取る constructor、deposit、withdraw、getBalance、__tostring)を維持してください。main.lua:複数の account を作成し、それらの間で transfer を実演して、異なる account オブジェクト間で Balance がどのように変化するかを示します。
5 つの inputs が与えられます:
- first account の ID
- second account の ID
- first account への initial deposit
- first transfer amount(account 1 から account 2 へ)
- second transfer amount(account 1 から account 2 へ)
main ファイルで、given IDs を持つ 2 つの account(both は Balance 0 から開始)を作成し、initial amount を first account に deposit してから、first account から second account への both transfer を試みます。各 transfer の試行後に、両方の account を print してください(__tostring によって current state が表示されます)。
たとえば、inputs が 101、102、500、200、400 の場合、出力は次のようになります:
Account [101]: Balance = 300
Account [102]: Balance = 200
Insufficient funds
Account [101]: Balance = 300
Account [102]: Balance = 200first account は deposit の after に 500 で開始します。first transfer の 200 は successful となり、account 101 には 300、account 102 には 200 が残ります。second transfer の 400 は、account 101 が 300 しか持っていないため失敗し、both の Balance は変更されません。
自分で試してみよう
-- 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回目の送金後に両方のアカウントを出力する
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: Luaオンラインコンパイラ