Funciones lambda, parte 2
Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 55 de 78.
Una lambda de una sola línea puede elegir su resultado con el operador ternario, 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)) # AdultPara más de dos casos, encadena un segundo ternario después de else, o escribe la lambda como un bloque con if y elif:
var grade = func(score):
if score == 100:
return "Perfect"
elif score >= 60:
return "Pass"
return "Fail"
print(grade.call(75)) # PassComo una lambda es un valor, puedes pasarla a una función. Declara el parámetro con el tipo Callable y ejecútala con call():
func apply_twice(fn: Callable, value):
return fn.call(fn.call(value))print(apply_twice(func(n): return n + 3, 1)) # 7Una función con nombre se puede pasar de la misma manera: escribe su nombre sin paréntesis, como en apply_twice(double, 5).
Los métodos integrados también aceptan funciones. sort_custom() ordena un arreglo con una lambda que recibe dos elementos y devuelve true cuando el primero debe ir antes:
var scores = [40, 90, 75]
scores.sort_custom(func(a, b): return a > b)
print(scores) # [90, 75, 40]Una lambda puede leer las variables locales que la rodean, pero copia sus valores cuando se crea. Cambiar una de esas variables después no afecta a la lambda, y asignarle un valor dentro de la lambda no cambia la variable externa.
Desafío
FácilEl programa lee un número entero. Crea una lambda y guárdala en una variable llamada categorize_number. Toma un número y devuelve:
Positivesi el número es mayor que0Zerosi el número es0Negativesi el número es menor que0
Llámala con el número que leíste e imprime el resultado. Para la entrada 10, la salida es:
PositivePruébalo tú mismo
extends Node
func _ready():
var number := int(OS.read_string_from_stdin())
# Crea la función lambda categorize_number aquí
# Llámala con number e imprime el resultado
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y flujo
1Cadenas de texto en profundidad
Métodos de cadenasBúsqueda en cadenasReemplazar y eliminar espaciosDividir y unirRepaso - Comprobación del nombre de usuario4Diccionarios, parte 2
Diccionarios anidadosArrays de diccionariosCombinar diccionariosCopiar diccionariosRepaso: contador de frecuencias7Enumeraciones
¿Qué es una enumeración?Definir una enumeraciónValores de una enumeraciónEnumeraciones en matchRepaso: semáforo10Funciones avanzadas
Devolver múltiples valoresFunciones lambda, parte 1Funciones lambda, parte 2Repaso: ordenar con lambdaFunciones recursivas, parte 1Funciones recursivas, parte 2Repaso: sumar un array anidado13Sistema de gestión de inventario
Descripción general del proyectoAñadir artículo2Toma de decisiones avanzada
Coincidencia con variablesGuardas de coincidenciaPatrones de arraysPatrones de diccionariosComprobaciones de pertenenciaRepaso: analizador de comandos5Aplicación de agenda de contactos
Mostrar menúAñadir contacto8Gestor de expedientes estudiantiles
Descripción del proyectoAgregar estudiante3Arrays multidimensionales
Conceptos básicos de arrays 2DAcceso a elementos de arrays 2DBucles anidados con arrays 2DRepaso: arrays 2DArrays irregularesPatrones comunes de arrays 2DRepaso: tablero de juego6Conjuntos con diccionarios
¿Qué es un conjunto?El diccionario como conjuntoAñadir y eliminarUnión e intersecciónDiferencia de conjuntosRepaso: eliminar duplicados9Agregación avanzada de datos
Suma de valoresCómo encontrar el mínimo y el máximoOrdenación personalizadaRepaso: organizador de diccionariosPractica por tu cuenta: Compilador de GDScript online