Защитные условия
Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 68 из 78.
Когда функции нужно выполнить несколько проверок, вложение одного if в другой заставляет основную работу уходить всё глубже:
func buy(gold: int, price: int) -> String:
if price > 0:
if gold >= price:
return "Bought! %d gold left" % (gold - price)
else:
return "Not enough gold"
else:
return "Invalid price"Защитная проверка меняет этот подход на противоположный. В начале функции она проверяет один недопустимый случай и сразу выходит с помощью return. Код после защитных проверок выполняется только при допустимых значениях, и ему не нужны вложенные блоки:
func buy(gold: int, price: int) -> String:
if price <= 0:
return "Invalid price"
if gold < price:
return "Not enough gold"
return "Bought! %d gold left" % (gold - price)buy(50, 30) возвращает Bought! 20 gold left, buy(10, 30) возвращает Not enough gold, а buy(50, 0) возвращает Invalid price.
Порядок проверок важен: проверка, которая защищает строку, должна идти перед ней. Проверь текст с помощью is_valid_int(), прежде чем использовать число, и проверь, равно ли значение нулю, прежде чем делить:
func share(coins: int, players: int) -> int:
if players <= 0:
return 0
return coins / playersВ функции -> void защитным условием служит отдельный return. Внутри цикла continue работает как защитное условие для одного элемента: он пропускает недопустимый элемент, и цикл продолжается со следующим.
Задание
ЛегкоНапишите функцию process_data. Она принимает строку text и возвращает строку:
- Если
textне является целым числом, вернитеInput must be a number! - Если число равно
0, вернитеCannot divide by zero! - В противном случае разделите
100.0на число и верните результат с двумя знаками после запятой
Например, process_data("8") возвращает 12.50, process_data("-5") возвращает -20.00, а process_data("abc") возвращает Input must be a number!.
Напишите обе проверки в виде защитных условий в начале функции.
Попробуйте сами
func process_data(text: String):
# Напишите код здесь
pass
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и потоки выполнения
1Строки: углублённое изучение
Методы строкПоиск в строкахЗамена и обрезка пробеловРазделение и объединениеПовторение — проверка имени пользователя4Словари. Часть 2
Вложенные словариМассивы словарейОбъединение словарейКопирование словарейПовторение — подсчёт частоты10Продвинутые функции
Возврат нескольких значенийЛямбда-функции. Часть 1Лямбда-функции. Часть 2Повторение — сортировка с помощью лямбда-функцииРекурсивные функции. Часть 1Рекурсивные функции. Часть 2Повторение — сумма вложенного массива13Система управления запасами
Обзор проектаДобавление товара2Продвинутое управление ветвлением
Сопоставление с переменнымиУсловия в шаблонахШаблоны массивовШаблоны словарейПроверка принадлежностиИтоги — парсер команд5Приложение «Телефонная книга»
Показать менюДобавить контакт8Менеджер успеваемости студентов
Обзор проектаДобавить студента3Многомерные массивы
Основы двумерных массивовДоступ к элементам двумерного массиваВложенные циклы с двумерными массивамиПовторение: двумерные массивыРваные массивыТипичные шаблоны работы с двумерными массивамиПовторение: игровое поле6Множества и словари
Что такое множество?Словарь как множествоДобавление и удалениеОбъединение и пересечениеРазность множествПовторение — удаление дубликатов9Расширенная агрегация данных
Суммирование значенийПоиск минимального и максимального значенийПользовательская сортировкаПовторение — сортировщик словарей12Основы обработки ошибок
Что такое обработка ошибок?Проверка входных данныхЗащитные условияВозврат кодов ошибокПовторение — безопасное делениеПотренируйтесь самостоятельно: Онлайн-компилятор GDScript