Saltar al contenido
codexivo
Menú

Avanzado

Procedimientos como valores

Pasar procedimientos a otros procedimientos con mapear, filtrar, reducir y ordenar.

Un procedimiento es un valor como cualquier otro: se guarda en variables, listas y diccionarios, y se le pasa a otros procedimientos.

Abrir en el sandbox
variable números = [3, 8, 1, 6]
procedimiento es_par(n) {
  regresa n mod 2 == 0
}

imprimir(mapear(números, procedimiento(n) { regresa n * 10; }))
imprimir(filtrar(números, es_par))
imprimir(reducir(números, procedimiento(total, n) { regresa total + n; }, 0))
imprimir(alguno(números, es_par), todos(números, es_par))
imprimir(buscar(números, procedimiento(n) { regresa n > 5; }))
imprimir(ordenar(números, procedimiento(a, b) { regresa a > b; }))
ProcedimientoQué hace
mapear(lista, f)Lista nueva con f(x) de cada elemento
filtrar(lista, f)Los elementos para los que f(x) es verdadero
reducir(lista, f, inicial)Junta todo en un valor, empezando con inicial
alguno(lista, f)verdadero si f(x) lo es para al menos un elemento
todos(lista, f)verdadero si f(x) lo es para todos
buscar(lista, f)El primer elemento con f(x) verdadero, o nulo
ordenar(lista, va_antes)Lista nueva ordenada; va_antes(a, b) responde "¿va a antes que b?"

Procedimientos que recuerdan

Un procedimiento recuerda las variables del lugar donde se creó:

Abrir en el sandbox
procedimiento crear_contador() {
  variable cuenta = 0
  regresa procedimiento() {
    cuenta++
    regresa cuenta
  }
}
variable siguiente = crear_contador()
siguiente()
siguiente()
imprimir(siguiente())

En un diccionario

Abrir en el sandbox
variable calculadora = {
  "suma": procedimiento(a, b) { regresa a + b; },
  "resta": procedimiento(a, b) { regresa a - b; },
}
imprimir(calculadora.suma(1, 3), calculadora.resta(5, 2))