Menu
Coddy logo textTech

コロン構文

CoddyのLuaジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 3/70。

毎回 counter.increment(counter) と書くのは面倒でエラーの元になります。Lua にはより簡潔な方法が用意されています。それがコロン (:) 演算子です。

コロンを使用して関数を定義すると、Luaは自動的に最初のパラメータとして self を追加します:

local player = {
    name = "Hero"
}

-- 定義でコロンを使用
function player:greet()
    print("Hello, I am " .. self.name)
end

コロンは関数を呼び出す際にも機能します。テーブルが最初の引数として自動的に渡されます:

player:greet()  -- 出力: Hello, I am Hero

これは player.greet(player) と書くのと同等ですが、はるかにすっきりしています。コロンは定義時と呼び出し時の両方で self パラメータを自動的に処理します。

両方のアプローチが同一の結果を生成することを示す比較は以下の通りです:

local counter = { value = 0 }

-- ドット構文 (明示的な self)
function counter.increment(self)
    self.value = self.value + 1
end
counter.increment(counter)

-- コロン構文 (自動的な self)
function counter:decrement()
    self.value = self.value - 1
end
counter:decrement()

コロン構文は、Luaにおいてメソッドを定義・呼び出す標準的な方法です。これにより、コードがより短く、反復の少ないものになります。

challenge icon

チャレンジ

簡単

入力として受け取る値で初期化された field message を持つ、greeter という名前の table を作成します。

colon syntax を使用してメソッド :sayHello(name) を追加し、次の形式で greetingprint します。

[message], [name]!

2つの input を受け取ります:

  1. greeter.message に保存する greeting message
  2. :sayHello() method に渡す name

colon syntax を使用して methoddefinition し、colon syntax を使用してそれを Call します。整形された greetingprint してください。

例えば、messageWelcomenameLuna の場合、Output は次のようになります:

Welcome, Luna!

自分で試してみよう

-- 入力を読み取る
local message = io.read()
local name = io.read()

-- TODO: 以下にコードを書いてください
-- 1. 'greeter' という名前のテーブルを作成し、フィールド 'message' を持たせる
-- 2. コロン構文を使ってメソッド :sayHello(name) を追加する
-- 3. コロン構文を使ってメソッドを呼び出し、挨拶を出力する
quiz icon腕試し

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

オブジェクト指向プログラミングのすべてのレッスン