Вывод данных и функция print

Разбираемся, как программа на Lua общается с нами через вывод.

print — встроенная функция Lua, которая печатает переданные значения в консоль и переходит на новую строку.

Вывод данных — это первое, что нужно освоить: без него вы не увидите, что делает программа. В играх print используют для отладки — чтобы понять, почему персонаж не прыгает или дверь не открылась.

print с несколькими значениями

В print можно передать сколько угодно значений через запятую. Между ними автоматически вставляется табуляция:

print("Игрок:", "Алиса", "Уровень:", 5)

Вывод:

Игрок:	Алиса	Уровень:	5

Склейка строк (конкатенация)

Если нужен красивый вывод без табуляций, склеивайте строки оператором .. (две точки):

local name = "Алиса"
local level = 5
print("Игрок " .. name .. " достиг уровня " .. level)

Вывод:

Игрок Алиса достиг уровня 5

Заметьте: Lua сама превратила число 5 в текст при склейке. Это удобно, но работает не всегда — например, со сложными значениями придётся преобразовывать вручную через tostring.

Функция string.format

Для аккуратного вывода чисел и шаблонов удобна string.format — она подставляет значения в шаблон:

local hp = 87.5
print(string.format("Здоровье: %.1f%%", hp))

Вывод:

Здоровье: 87.5%

Здесь %.1f означает «дробное число с одним знаком после запятой», а %% — это просто знак процента.

Как работает под капотом

Функция print внутри вызывает tostring для каждого аргумента, склеивает результаты через табуляцию и отправляет в стандартный поток вывода. Поэтому print может напечатать что угодно — число, строку, даже таблицу (правда, для таблицы выведется её адрес в памяти, а не содержимое).

Частые ошибки

  • Пытаться склеить строки знаком + — в Lua это сложение чисел, для склейки нужны ...
  • Забыть, что print добавляет перевод строки сам — двойного print хватит для двух строк.
  • Ждать, что print(myTable) покажет содержимое таблицы. Он покажет лишь её адрес.

Итог

  • print печатает значения в консоль, разделяя их табуляцией.
  • Оператор .. склеивает строки; числа при склейке превращаются в текст автоматически.
  • string.format даёт точный контроль над форматом вывода.
  • В играх print — главный инструмент отладки.
Проверьте себя
1. Какой оператор склеивает (конкатенирует) строки в Lua?
A+ (плюс)
B.. (две точки)
C& (амперсанд)
D, (запятая)
2. Что выведет print("a", "b")?
Aab
Ba и b в разных строках
Ca, b
Da и b, разделённые табуляцией