Menu
Coddy logo textTech

Синтаксис с двоеточием

Часть раздела Объектно-ориентированное программирование путешествия по Lua на Coddy — урок 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]!

Вы получите два входных значения:

  1. Приветственное сообщение для сохранения в greeter.message
  2. Имя для передачи в метод :sayHello()

Определите метод, используя синтаксис с двоеточием, и вызовите его, используя синтаксис с двоеточием. Выведите отформатированное приветствие.

Например, если сообщение — Welcome, а имя — Luna, вывод должен быть:

Welcome, Luna!

Попробуйте сами

-- Прочитать ввод
local message = io.read()
local name = io.read()

-- TODO: Напишите ваш код ниже
-- 1. Создайте таблицу с именем 'greeter' с полем 'message'
-- 2. Добавьте метод :sayHello(name), используя синтаксис двоеточия
-- 3. Вызовите метод, используя синтаксис двоеточия, чтобы вывести приветствие
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование