Menu
Coddy logo textTech

コロン構文

CoddyのLuaジャーニー「Object Oriented Programming」セクションの一部 — レッスン 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

チャレンジ

簡単

greeterという名前のテーブルを作成し、入力として受け取る値で初期化されたmessageフィールドを持たせてください。

コロン構文を使用して、次の形式で挨拶を表示するメソッド:sayHello(name)を追加してください:

[message], [name]!

2つの入力を受け取ります:

  1. greeter.messageに格納する挨拶メッセージ
  2. :sayHello()メソッドに渡す名前

コロン構文を使用してメソッドを定義し、コロン構文を使用して呼び出してください。フォーマットされた挨拶を表示します。

例えば、メッセージがWelcomeで名前がLunaの場合、出力は次のようになります:

Welcome, Luna!

チートシート

コロン(:)演算子は、selfパラメータを自動的に処理することで、Luaにおけるメソッドの定義と呼び出しのためのよりクリーンな構文を提供します。

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

function player:greet()
    print("Hello, I am " .. self.name)
end

コロンを使用して関数を呼び出すと、テーブルが最初の引数として自動的に渡されます。

player:greet()  -- player.greet(player) と同等

ドット構文とコロン構文の比較:

-- ドット構文(明示的な 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でメソッドを定義および呼び出すための標準的な方法であり、コードをより短く、繰り返しの少ないものにします。

自分で試してみよう

-- 入力を読み込む
local message = io.read()
local name = io.read()

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

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

Object Oriented Programmingのすべてのレッスン