Menu
Coddy logo textTech

Selfとコロンメソッド

CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 43/73。

rect.area(rect)と書いても動作しますが、Lua OOP で以前学んだ、よりよい方法があります。それがcolonです。rect:area()はまったく同じ呼び出しです。Lua は、colon の前にある table を最初の引数であるselfとして自動的に渡します。

colon は定義箇所でも役立ちます。function account:deposit(amount)は、最初の隠れたパラメーターとしてselfを自動的に宣言します。

type Account = {
    owner: string,
    balance: number,
    deposit: (self: Account, amount: number) -> (),
    getBalance: (self: Account) -> number,
}

local account = {owner = "Maya", balance = 1500}

function account:deposit(amount: number)
    self.balance += amount -- self は暗黙的です
end

function account:getBalance(): number
    return self.balance
end

型の形ではselfexplicitly宣言していることに注目してください。つまりdeposit: (self: Account, amount: number) -> ()です。実装ではcolonによって隠されているにもかかわらず、です。colonは糖衣構文です。パラメーターはそこに存在し、型ではそれを明示します。何も返さないメソッドは、空の戻り値-> ()を使って型付けします。

呼び出しも、すでに知っている同じルールに従います。account:deposit(250)account.deposit(account, 250)と同一です。OOP の章で扱ったものと同じ実行時の動作であり、Luau はその上に型を追加しているだけです。

challenge icon

チャレンジ

簡単

Accountという名前の型エイリアスを作成し、次の要素を含めます。

  • 型がstringowner
  • 型がnumberbalance
  • deposit(self: Account, amount: number) -> ()
  • getBalance(self: Account) -> number

ownerが"Maya"、balanceが1500accountというtableを作成し、colon定義のsyntax(function account:deposit(amount: number) …)を使って両方のmethodsをアタッチします。depositamountをbalanceに加算し、getBalanceは現在のbalanceを返します。

colon呼び出しを使用して、次の操作を行います。

  1. balanceをprintする
  2. 250をdepositする
  3. balanceをもう一度printする
  4. ownerをprintする

自分で試してみよう

-- ここにコードを書いてください
-- 1) 型 Account を定義する(メソッドは型の中で self を明示的に取る)
-- 2) account テーブルを作成し、コロン構文で deposit/getBalance をアタッチする
-- 3) balance を表示し、250 を deposit し、再度 balance を表示し、owner を表示する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Luau入門のすべてのレッスン

自分で練習してみよう: Luaオンラインコンパイラ