Menu
Coddy logo textTech

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

Часть раздела Object Oriented Programming путешествия по 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!

Шпаргалка

Оператор двоеточия (:) обеспечивает более чистый синтаксис для определения и вызова методов в Lua, автоматически обрабатывая параметр self.

При определении функции с использованием двоеточия 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. Создайте таблицу с именем 'greeter' и полем 'message'
-- 2. Добавьте метод :sayHello(name), используя синтаксис с двоеточием
-- 3. Вызовите метод, используя синтаксис с двоеточием, чтобы вывести приветствие
quiz iconПроверьте себя

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

Все уроки раздела Object Oriented Programming