Menu
CoddyTech

Лямбда-функции. Часть 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]

Лямбда-функция может считывать окружающие её локальные переменные, но копирует их значения при создании. Последующее изменение такой переменной не повлияет на лямбда-функцию, а присваивание ей значения внутри лямбда-функции не изменит переменную снаружи.

challenge icon

Задание

Легко

Программа считывает целое число. Создай лямбда-функцию и сохрани её в переменной с именем categorize_number. Она принимает одно число и возвращает:

  • Positive, если число больше 0
  • Zero, если число равно 0
  • Negative, если число меньше 0

Вызови её с прочитанным числом и выведи результат. Для ввода 10 вывод будет таким:

Positive

Попробуйте сами

extends Node

func _ready():
	var number := int(OS.read_string_from_stdin())
	# Создайте здесь лямбда-функцию categorize_number

	# Вызовите её с аргументом number и выведите результат
quiz iconПроверьте себя

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

Все уроки раздела Логика и потоки выполнения

Потренируйтесь самостоятельно: Онлайн-компилятор GDScript