Лямбда-функции. Часть 2
Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 55 из 78.
Однострочная лямбда может выбирать результат с помощью тернарного оператора: value_if_true if condition else value_if_false:
var check_age = func(age): return "Adult" if age >= 18 else "Minor"
print(check_age.call(20)) # AdultДля более чем двух случаев добавь второе тернарное выражение после else или запиши лямбда-выражение в виде блока с if и elif:
var grade = func(score):
if score == 100:
return "Perfect"
elif score >= 60:
return "Pass"
return "Fail"
print(grade.call(75)) # PassПоскольку лямбда — это значение, её можно передать функции. Объяви параметр с типом Callable и вызови её с помощью call():
func apply_twice(fn: Callable, value):
return fn.call(fn.call(value))print(apply_twice(func(n): return n + 3, 1)) # 7Именованную функцию можно передать таким же образом: укажи её имя без скобок, как в apply_twice(double, 5).
Встроенные методы тоже принимают функции. sort_custom() сортирует массив с помощью лямбда-функции, которая получает два элемента и возвращает true, если первый элемент должен идти первым:
var scores = [40, 90, 75]
scores.sort_custom(func(a, b): return a > b)
print(scores) # [90, 75, 40]Лямбда-функция может считывать окружающие её локальные переменные, но копирует их значения при создании. Последующее изменение такой переменной не повлияет на лямбда-функцию, а присваивание ей значения внутри лямбда-функции не изменит переменную снаружи.
Задание
ЛегкоПрограмма считывает целое число. Создай лямбда-функцию и сохрани её в переменной с именем categorize_number. Она принимает одно число и возвращает:
Positive, если число больше0Zero, если число равно0Negative, если число меньше0
Вызови её с прочитанным числом и выведи результат. Для ввода 10 вывод будет таким:
PositiveПопробуйте сами
extends Node
func _ready():
var number := int(OS.read_string_from_stdin())
# Создайте здесь лямбда-функцию categorize_number
# Вызовите её с аргументом number и выведите результат
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и потоки выполнения
1Строки: углублённое изучение
Методы строкПоиск в строкахЗамена и обрезка пробеловРазделение и объединениеПовторение — проверка имени пользователя4Словари. Часть 2
Вложенные словариМассивы словарейОбъединение словарейКопирование словарейПовторение — подсчёт частоты10Продвинутые функции
Возврат нескольких значенийЛямбда-функции. Часть 1Лямбда-функции. Часть 2Повторение — сортировка с помощью лямбда-функцииРекурсивные функции. Часть 1Рекурсивные функции. Часть 2Повторение — сумма вложенного массива13Система управления запасами
Обзор проектаДобавление товара2Продвинутое управление ветвлением
Сопоставление с переменнымиУсловия в шаблонахШаблоны массивовШаблоны словарейПроверка принадлежностиИтоги — парсер команд5Приложение «Телефонная книга»
Показать менюДобавить контакт8Менеджер успеваемости студентов
Обзор проектаДобавить студента3Многомерные массивы
Основы двумерных массивовДоступ к элементам двумерного массиваВложенные циклы с двумерными массивамиПовторение: двумерные массивыРваные массивыТипичные шаблоны работы с двумерными массивамиПовторение: игровое поле6Множества и словари
Что такое множество?Словарь как множествоДобавление и удалениеОбъединение и пересечениеРазность множествПовторение — удаление дубликатовПотренируйтесь самостоятельно: Онлайн-компилятор GDScript