Урок Roblox StudioЗанятие 8 / 8

Обработка ошибок pcall

Не останавливать весь процесс при ошибке

Обработка ошибок pcall
Иллюстрация к теме занятия

Цель занятия

Научиться использовать тему «безопасное выполнение» в небольшом игровом проекте и объяснять каждую строку программы.

Подготовка

Где разместить код: Script в ServerScriptService

Порядок работы

  1. Открой Roblox Studio и создай отдельную копию учебной игры.
  2. Создай объекты и скрипты точно по схеме подготовки, обращая внимание на названия и тип Script или ModuleScript.
  3. Вставь каждый фрагмент в соответствующий скрипт, сохрани проект и запусти Play.
  4. Открой View → Output и сравни вывод с ожидаемым результатом.
  5. Измени одно значение, запусти ещё раз и объясни, почему результат изменился.

Код Luau

local function divide(a, b)
    assert(b ~= 0, "Деление на ноль")
    return a / b
end
local ok, result = pcall(divide, 12, 3)
print("Успех:", ok, "Результат:", result)
local ok2, err = pcall(divide, 12, 0)
if not ok2 then
    warn("Операция не выполнена:", err)
end

Проверяем результат

Первая операция выводит true и 4; вторая не обрывает выполнение скрипта, а выводит предупреждение.

Типичная ошибка

pcall перехватывает ошибку, но не делает неверную операцию успешной.

Усложнение

Сделай безопасную функцию, которая возвращает значение по умолчанию при ошибке.

Рефлексия

Объясни преподавателю смысл кода своими словами. Покажи работу примера в Play и окно Output.

Перед публикацией добавь реальные скриншоты Studio и проверь код в редакторе.

Проверь свою работу

Перед тестом убедись, что ты выполнил практику самостоятельно.

Эти отметки — личная памятка, они не влияют на звёзды.

Проверь себя

Ответь на вопросы урока. Успешный тест даёт одну звезду в личном кабинете.

⭐ Проверь свои знания

5 вопросов по теме урока. За 4 правильных ответа получишь звезду. Повторные попытки разрешены.

1. Что возвращает pcall при успешном выполнении функции, которая возвращает 7?
2. Какой первый результат pcall при ошибке внутри вызываемой функции?
3. Зачем оборачивать операции DataStore в pcall?
4. Что правильно делать после неудачного GetAsync?
5. Что выведет local ok, result = pcall(function() return 2+3 end); print(ok, result)?