No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Programación funcional

9/21
Recursos

La programación funcional es un paradigma declarativo que usa funciones como “ciudadanas de primera clase”. Las funciones (en programación) son fragmentos de código reutilizables, que pueden recibir datos y dar salidas a otros datos como resultado, incluyendo otras funciones. Mediante la programación funcional se busca eliminar o reducir los efectos secundarios.

En la programación funcional se pueden crear funciones de orden superior (HOF). Prioriza el uso de recursividad y HOF para resolver problemas.

Origen de la programación funcional

En los años 30, Alonzo Church desarrolló el cálculo Lambda. Alan Turing demostró que este es equivalente a las máquinas de Turing. A finales de los 50, se desarrolló LISP, implementando la notación lambda de Church. Aquí un ejemplo en LISP de cómo se ve un “hola mundo” y una función recursiva (que se llama a sí misma) donde se calcula el factorial de un número n.

(print "Hello, World!")
(defun factorial (n)
    (if (= n 0) 1
        (* n (factorial (- n 1)))))

Funciones

En matemáticas, una función se define como una relación entre dos conjuntos que asigna cada elemento del primero, un elemento del segundo o ninguno.
Por ejemplo, una función que toma un valor “X” y genera un valor “Y”.

f(X) = X + 3
f(X) = X^2 + 3

Un ejemplo de funciones en Python es el siguiente. La función suma recibe dos números (a y b) y retorna la suma de los dos números. Aquí podemos ver que el concepto de función en matemáticas y en programación es parecido.

def suma (a, b):
    return a + b
operacion_1 = suma(3, 2)

Las funciones también pueden hacer uso de otras funciones, como en el siguiente ejemplo.

def es_par(x):
    return not es_impar(x)

Es más, las funciones pueden llamarse a sí mismas (recursión)

def fibonacci(n):
    if n<=1:
        return m
    else:
        return fibonacci(n-1)+fibonacci(n-2)

Conceptos de la programación funcional

Al principio mencionamos conceptos como “ciudadanas de primera clase”, funciones de orden superior y efectos secundarios. Definamos estos (y más) conceptos.

Funciones como ciudadanas de primera clase

El que las funciones sean ciudadanas de primera clase implica que son reconocidas como un tipo de dato más. Esto hace que se puedan usar en cualquier parte del programa.

Funciones de orden superior

Una función de orden superior puede recibir una o varias funciones como parámetro. Además, puede retornar otra función.

Funciones puras

Una función es pura si cumple con los siguientes requisitos.

  • Es determinista: para un parámetro, la función siempre va a retornar el mismo resultado siempre y cuando no se cambie dicho parámetro (por ejemplo, una función que retorne un valor aleatorio no es determinista).
  • Un valor de entrada da un solo valor de salida.
  • No genera efectos secundarios.
  • No incluye funciones impuras.

Funciones lambda

Una función lambda es una función anónima, es decir, que no se le asigna un nombre. Normalmente, se usan en una única sección del código. Por lo general realizan operaciones simples.

Un ejemplo de una función lambda que multiplica dos números en Python:

x = lambda a, b: a**b
print(x(3,3))

Efectos secundarios (side effects)

Es común escuchar de efectos secundarios cuando hablamos de programación imperativa. Lo podemos ver cuando manejamos funciones o variables de contexto global o que están delimitadas. Cuando escribimos código sabemos que lo que está dentro de una función, no afecta a otra, si es que usamos la sintaxis correcta. Pero también existen funciones que usan parámetros o que tienen alcance global y pueden tener efectos secundarios.

Los efectos secundarios son cambios observables en partes de un programa como:

  • El estado de la aplicación.
  • Valores de datos.
  • Modificación de archivos.

Lenguajes y ejemplos

Este es un ejemplo en Haskell, donde calculamos el factorial de un número. En ejemplos anteriores habíamos podido ver como se define el tipo de dato, después se asignan los tipos de valores y se empieza a llamar a la función. Podemos ver que el código no es tan amplio como si lo hubiéramos escrito de forma no recursiva con otros lenguajes.

module Main where

import Text.Printf

factorial :: Integer -> Integer
factorial 0 = 1
factorial n = n factorial (n - 1)

line x = printf "%d! = %d\n" x $
factorial x

main = mapM_ line [0..16]

Aquí otro ejemplo con F#, donde vemos que también es recursivo porque la función factorial se llama a sí misma.

let rec factorial n = 
    match n with
    | 0 | 1 -> 1
    | _ -> n * factorial(n-1)

Otros lenguajes funcionales son SCHEME, CLOJURE, RACKET y ERLANG.

Conclusión

La programación funcional nos permite escribir código especificando qué queremos hacer más que cómo se debe hacer. A su vez, nos permite evitar efectos secundarios. Es importante entender conceptos como funciones de orden superior, recursividad o funciones puras para poder hacer un buen uso de la programación funcional.

Contribución creada por: Ciro Villafraz con los aportes de Iris Valentina.

Aportes 68

Preguntas 9

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Hice algunos ejemplos en JavaScript:

Funciones Puras:

function Pura (a) {
    return a * 2
}

Pura (2)  // Resultado: 4

Recibe un parámetro y retorna un único valor, además con antelación puedo saber cuál será el resultado

Funciones ImPuras:

function ImPura () {
    return Math.random()
}

ImPura() // Número decimal aleatorio entre 0 - 1

No recibe ningún parámetro y aunque lo recibiera, no puedo predecir el resultado de la función

Funciones Lambda:

((n) => {
    return "La mitad de "+n+" es: "+ n/2
})(8); // Resultado: "La mitad de 8 es: 4"

Es una función anónima que igual recibe un parámetro y retorna un único valor.

Funciones de orden superior:

function OrdenSuperior ( funcionRecibida ) {

    funcionRecibida();

    return function () {
        console.log("Hola soy la función retornada")
    }
}

const Resultado = OrdenSuperior( () => { console.log("Hola soy la función enviada como parámetro") } )
// Resultado: "Hola soy la función enviada como parámetro"

Resultado() // Resultado de llamar la función retornada: "Hola soy la función retornada"

Les comparto mis apuntes, espero les sea de mucha mucha ayuda para que #NuncaParenDe Aprender
Programación funcional

Es un paradigma que usa funciones como “Ciudadanas de primera clase”. Puede crear funciones de orden superior. Prioriza el uso de recursividad y HOF para resolver problemas.

Una función puede recibir y dar salidas a otros datos como resultado, incluyendo a otras funciones. Se busca eliminar o reducir los efectos secundarios.

Origen

En los años 30, Alonzo Church desarrolla el cálculo Lambda. Alan Turing demuestra que este es el equivalente a las maquinas de Turing.

A finales de los 50, se desarrolla LISP, implementando la notación lambda de Church.

Dato curioso

La saga de video juegos Jack and Daxter, fueron desarrollados en GOAL (Game Oriented Assembly Lisp). Está basado en Lisp, fue desarrollado con programación netamente funcional.

(print "Hello, World!")
(defun factorial (n)
(if (= n 0) 1
(* n (factorial (- n 1)))))

Funciones

Relación entre dos conjuntos que asigna cada elemento del primero un elemento del segundo o ninguno.

En matemáticas una función es algo similar:

Programación funcional

Es un paradigma que usa funciones como “Ciudadanas de primera clase”. Puede crear funciones de orden superior. Prioriza el uso de recursividad y HOF para resolver problemas.

Una función puede recibir y dar salidas a otros datos como resultado, incluyendo a otras funciones. Se busca eliminar o reducir los efectos secundarios.

Origen

En los años 30, Alonzo Church desarrolla el cálculo Lambda. Alan Turing demuestra que este es el equivalente a las maquinas de Turing.

A finales de los 50, se desarrolla LISP, implementando la notación lambda de Church.

Dato curioso

La saga de video juegos Jack and Daxter, fueron desarrollados en GOAL (Game Oriented Assembly Lisp). Está basado en Lisp, fue desarrollado con programación netamente funcional.

(print "Hello, World!")
(defun factorial (n)
(if (= n 0) 1
(* n (factorial (- n 1)))))

Funciones

Relación entre dos conjuntos que asigna cada elemento del primero un elemento del segundo o ninguno.

En matemáticas una función es algo similar:

Un tipo de dato u objeto que toma un valor “X” y genera un valor “Y”

Puede o no devolver un resultado.

f(X) = X + 3

f(X) = X^2 + 3

Aquí tenemos el ejemplo de una función en python. Toma dos parámetros y nos va a retornar como resultado, la suma de ambos parámetros.

def suma (a, b)
return a + b
def suma (a, b): 
a + b
operacion_1 = suma(3, 2)

Ciudadanas de primera clase

Son reconocidas por el lenguaje, se utilizan como un tipo de dato y en cualquier parte del programa.

Funciones de orden superior

Es una función que puede:

  • Tomar una o más funciones como parámetro o;
  • Retornar una función como salida.

Funciones puras

  • Son determinísticas.
  • Un valor de entrada da un solo valor de salida.
  • No genera efectos secundarios.
  • No incluye funciones impuras.

Funciones lambda

  • Función anónima.
  • Comportamiento de uso único.
  • Contexto específico o corto tiempo.
  • Simplicidad.

Efectos secundarios

Es común escucharlo cuando hablamos de programación imperativa. Lo podemos ver cuando manejamos funciones o variables de contexto global o que están delimitadas. Ej: En JavaScript es muy importante tener un manejo del SCOPE (alcance de las variables)

Cuando escribimos código sabemos que lo que esta dentro de una función, no afecta a otra, si es que usamos la sintaxis correcta. Pero también existen funciones que utilicen parámetros o que tengan alcance global y puede tener efectos secundarios.

Forma en que alguien o algo se comporta ante un determinado estímulo.

Cambios observables

  • Estado de la aplicación.
  • Valores de datos.
  • Modificación de archivos, etc.

Lenguajes

  • LISP
  • SCHEME
  • CLOJURE
  • RACKET
  • ERLANG
  • HASKELL
  • F#

Como podemos ver, aquí está la función que se llama a sí misma y solamente modifica los parámetros cuando lo hace, como característica hay muchos paréntesis, pero es simplemente parte de la sintaxis.

(defun factorial (n)
(cond
((= n 0) 1)
((= n 1) 1)
(t (* n (factorial (- n 1 ))))))

Tenemos en Haskell donde calculamos el factorial de un número, en ejemplos anteriores habíamos podido ver como se define el tipo de dato, después se asignan los tipos de valores y se empieza a llamar a la función. Podemos ver que el código no es tan amplio como si lo hubiéramos escrito de forma no recursiva con otros lenguajes.

module Main where

import Text.Printf

factorial :: Integer -> Integer
factorial 0 = 1
factorial n = n factorial (n - 1)

line x = printf "%d! = %d\n" x $
factorial x

main = mapM_ line [0..16]

Aquí también tenemos un ejemplo con F# que es un lenguaje funcional y vemos que también es recursivo porque la función factorial se está llamando a sí misma.

let rec factorial n = 
match n with
| 0 | 1 -> 1
| _ -> n * factorial(n-1)

Woow, todo esto fue lo que me preguntaron en mi primera entrevista técnica para ser software engineer en México. Fue tipo así
-Qué es una clase?
Es la definicón de un objeto 😃
-y qué es un objeto?
Es una instancia de una clase, es como si una clase fuera un cortador de galleta y el objeto es una galleta
-y qué es una instancia?
Los objetos se almacenan en memoria y la instancia es el espacio que hace referencia a ellos
-muy bien, ahora cuentame qué es el polimorfismo?
-…
-no te preocupes, dime qué es el encapsulamiento?
-el encapsulamiento permite limitar ? los métodos de un objeto?
-ok… y qué es lamnda?
-…una letra griega :v
Estudie informatica y me sentia super confiada, la verdad con estas clases y las entrevistas ténicas me doy cuenta del gap mental que tenia entre cada concepto.

Una función impura puede ser las operaciones matemáticas: según el número que le demos va a retornar un resultado diferente. Otra podría ser solicitar la edad de una persona. Como lo entiendo yo, la función impura es cualquier función donde el dato de salida depende del dato de entrada. Si cambia el dato de entrada, cambia el dato de salida. En las puras los datos podrían llamarse también constantes, pues no cambian. Por ejemplo, solicitamos el valor de pi. Es siempre el mismo valor.

Programación funcional

  • Se basa en las funciones
  • Prioriza la recursividad y funciones de orden superior
  • Se busca eliminar o reducir efectos secundarios
  • Origen en los 30 a nivel de teoría
  • Finales de los 50 con LISP
  • Algunos logos de los lenguajes más famosos suelen tener el simbolo de lambda
  • Una función es una relación entre dos conjuntos que asigna a cada elemento del primero uno o ninguno del segundo o ninguno

Ciudadanas de primera clase
En estos lenguajes las funciones se tratan como un tipo de dato más y se pueden llamar desde cualquier parte del programa

Funciones de orden superior
pueden tomar una o más funciones como parámetro y retornar una función como salida

Funciones puras

  • Son determinísticas
  • Un valor de entrada da un solo valor de salida
  • No genera efectos secundarios
  • No incluye funciones impuras

Funciones lambda

  • Función anónima
  • Comportamiento de uso único
  • Contexto específico o corto tiempo
  • Simplicidad

De los lenguajes mencionados solo reconozco a F# (F Sharp), ¿Alguién lo llego a utilizar?

Las funciones lambda me hacen pensar remotamente en las funciones delta de dirac, que (según la wikipedia) podrian entenderse como una función igual a cero en todas partes excepto en un punto y cuya integral sobre toda la línea real es igual a uno.

🤔 La programación funcional tiene como pilar fundamental la inmutabilidad.

Como lo veo: Una función es un bloque de código que hace algo especifico, y puede ser llamado desde diferentes puntos del programa.

que interesante curso. Voy a verlo varias veces y tomar notas

La programación funcional es una forma de entender nuestro software como una serie de funciones matemáticas en las que, dadas unas entradas determinadas, siempre obtenemos las mismas salidas.

Una funcion impura podria ser aquella que retorna valores aleatorios como lo es Math.random() en Js.

Tambien lo podrian ser aquellas que requieren recursos externos de los que no podriamos tener pleno control. Una función que acceda a una url para descargar datos, por ejemplo. Estos datos pueden variar cada segundo o el servidor puede estar caido y la funcion devolveria un error o un dato vacio

Entendemos por programación funcional un lenguaje de programación declarativo donde el programador especifica lo que quiere hacer, en lugar de lidiar con el estado de los objetos. Es decir, las funciones estarían en un primer lugar y nos centraremos en expresiones que pueden ser asignadas a cualquier variable.

Que interesante que ha sido este curso hasta ahora.

wooo mi cabezaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

La programación funcional nos es más que un paradigma de programación, es decir, es una forma en la cual podemos resolver diferentes problemáticas.

Functional Programming (Programación Funcional), comúnmente abreviado FP.

Cuando nos encontramos desarrollamos software utilizando este paradigma, estaremos trabajando principalmente con funciones, evitaremos los datos mutables, así como el hecho de compartir estados entre funciones.

Con este paradigma las funciones serán tratadas como ciudadanos de primera clase. Las funciones podrán ser asignadas a variables además podrán ser utilizadas como entrada y salida de otras funciones.

A las funciones que puedan tomar funciones como parámetros y devolver funciones como resultado serán conocidas como función de orden superior.

La programación funcional es un paradigma declarativo. Nos enfocaremos en “qué” estamos haciendo y no en “cómo” se está haciendo que sería el enfoque imperativo. Esto quiere decir que nosotros expresaremos nuestra lógica sin describir controles de flujo; no usaremos ciclos o condicionales.

Veamos un ejemplo utilizando Java.

Java, cómo sabemos es un lenguaje orientado a objetos, sin embargo, en versiones recientes nosotros podemos hacer uso de la programación funcional.

En este ejemplo, la problemática es conocer la cantidad de elementos en la lista mayores a 10.

List<Integer> numeros = List.of(18, 6, 4, 15, 55, 78, 12, 9, 8);

Hay un error en el concepto de “función pura” y la función cuadrática.
El profesor dice “por cada valor de entrada va a haber un solo valor de salida”. Esto en matemáticas aplica para la definición de función en sí misma. Si una función recibe una entrada, retorna una única salida, si no, no es función. Gráficamente se puede apreciar esto si se busca en internet: criterio de la recta vertical.
Dentro del mundo de la programación las funciones puras cumplen con o que el profesor dice, pero en el mundo de las matemáticas tanto la función lineal como la función cuadrática retornan un solo valor para una entrada específica, de lo contrario no serían funciones.
Posiblemente haya una confusión con el concepto en matemáticas de función inyectiva que es una función que para un valor retornado Y hay un único valor de entrada X (para una imagen dada hay una única preimagen), lo cual no es lo mismo que decir que para una entrada X hay una única salida Y (definición de función).
Un ejemplo gráfico de función inyectiva se puede encontrar si se busca en internet: criterio de la recta horizontal.

cálculo lamda
Es un concepto importante para comprender la programación funcional

Si no entendí mal, una función impura nunca vale lo mismo, siempre cambia. Por ejemplo, se me viene a la cabeza el peso argentino, todos los días cambia jajaj

FUNCIONES
.
Segun la RAE una función es la
.
“Relación entre dos conjuntos que asigna a cada elemento del primero un elemento del segundo o ninguno.”
.
En la programación una función es un tipo de dato u objeto que toma un valor “X” y genera un valor “Y”.
.
Puede o no devolver un resultado.
.
f(x) = X + 3 f(x) = Xˆ2 + 3
.
Características de las funciones puras
.

  • Son deterministas.
  • Un valor de entrada da un solo valor de salida.
  • No genera efectos secundarios.
  • No incluye funciones impuras.
    .
    Características de as funciones lambda
    .
  • Función anónima.
  • Comportamiento de uso unico.
  • Contexto especifico o corto tiempo.
  • Simplicidad.

Programación funcional: Paradigma que utiliza funciones como “ciudadanas de primera clase”(Reconocidas por el lenguaje para utilizarse cómo tipo de dato y en cualquier programa) para crear: Funciones de orden superior(Tomar una o más funciones como párametro, Retorna una función como salida. ej: Matrioshka).
-Paradigma declarativo-
.-Prioriza el uso de re-cursividad y HOF (resolviendo problemas)
.-Una función puede recibir y dar salida a otro dato como resultado, incluyendo otras funciones.
.-Se desarrolla a finales de los 50’ con LISP(lenguaje de estructura de datos)

*Función == “Relación entre dos conjuntos que asigna a cada elemento del primero un elemento del segundo o ninguno.”

*Funciones Lambda: .-Anóninima, .-Compartimiento de uso único, .-Contexto especifico, .-Simplicidad.

*Side effects: Cambios observables, que podamos percibir, .-Estado de la app, .-Valores de datos, .-Modificación de archivos.
ej. Lisp, Scheme, Clojure, Racket, Erlang, Haskell, F#

Mi resumen:

La programación funcional nos es más que un paradigma de programación, es decir, es una forma en la cual podemos resolver diferentes problemáticas.

Functional Programming (Programación Funcional), comúnmente abreviado FP.

Cuando nos encontramos desarrollamos software utilizando este paradigma, estaremos trabajando principalmente con funciones, evitaremos los datos mutables, así como el hecho de compartir estados entre funciones.

Con este paradigma las funciones serán tratadas como ciudadanos de primera clase. Las funciones podrán ser asignadas a variables además podrán ser utilizadas como entrada y salida de otras funciones.

A las funciones que puedan tomar funciones como parámetros y devolver funciones como resultado serán conocidas como función de orden superior.

La programación funcional es un paradigma declarativo. Nos enfocaremos en “qué” estamos haciendo y no en “cómo” se está haciendo que sería el enfoque imperativo. Esto quiere decir que nosotros expresaremos nuestra lógica sin describir controles de flujo; no usaremos ciclos o condicionales.

Una funcion pura es la que para unos mismos argumentos de entrada, siempre devuelve el mismo resultado y no tiene efectos secundarios, por ejemplo: public int sumar(int a, int b){ return a + b; } Una funcion impura es aquella que puede producir diferentes resultados para los mismos argumentos de entrada y tener efectos secundarios. int contador = 0; public int Incrementar contador() { contador++; return contador } La función `IncrementarContador` es impura porque modifica la variable `contador` que está fuera de su alcance y su resultado depende del estado previo de `contador`.

En R:

nombre_variable <- function (parametros) {
	expresion
}
fibonacci <- function (n) {
    if (n <= 1) {
      return (n)
    } else {
        return (fibonacci(n-1)+fibonacci(n-2))
        }
}

La parábola no es una función porque , de acuerdo a su definición, toma más de un valor en un mismo punto.

interesante el curso 🤔

La programación funcional nos permitirá desarrollar software mucho más legible y fácil de testear, nos concentramos en qué estamos haciendo y no en cómo se esta haciendo.

Hay que tener cuidado. El profesor dice que en las ecuaciones cuadráticas, por cada valor de X se puede retornar uno o más valores de Y. Esto NO ES ASÍ. Obviamente es un detalle y el profesor puede haberlo pasado por alto. Pero justamente desde el punto de vista matemático, si para cada valor de X se retornara más de un valor de Y entonces eso no sería una función (igual alcanza con ver la ecuación para confirmar que en este caso eso no puede pasar).

En este caso, por cada valor de X, hay uno y solo un valor de Y.

Creo que hay una confusión con las funciones cuadráticas, el profesor dice que para una X hay dos valores de Y, pero eso no puede ser ya que dejaría de ser una función. Lo que pasa en las funciones cuadráticas es que un solo valor de Y puede ser el resultado de dos valores distintos de X.

Funciones del navegador en javascript. Dependen del equipo que este usando el cliente

Funciones
Ciudadanas de Primera clase:

El Lenguaje de Programación en estos paradigmas como la Programación Funcional trata a las funciones como cualquier tipo de dato, como una variable, como un objeto y se pueden utilizar desde cualquier parte del programa.

Función pura y lambda en ruby, donde pasando el número del mes te muestra el detalle del mes.

def funcion_pura index
   meses = [
 	'ninguno',
	'enero',
	'febrero',
	'marzo',
	'abril',
	'mayo',
	'junio',
	'julio',
	'agosto',
	'septiembre',
	'octubre',
	'noviembre',
	'diciembre'
   ];
   puts meses[index]
end

metodo_lambda = -> (index) {
   meses = [
	'ninguno',
	'enero',
	'febrero',
	'marzo',
	'abril',
	'mayo',
	'junio',
	'julio',
	'agosto',
	'septiembre',
	'octubre',
	'noviembre',
	'diciembre'
   ];
   puts meses[index]
}

Mi saga de videojuegos favorita 🤩

Este podría ser un ejemplo de funciones impuras, comparándola con su contraparte pura mucho más simple

Me doy cuenta que he utilizado varios de esos tipos de funciones sin siquiera saberlo🤔

interesante el curso.

PARADIGMA DE PROGRAMACIÓN FUNCIONAL
.
Es un paradigma que corresponde al paradigma declarativo dentro de la programación.
.
Es un paradigma considerado complejo de comprender, analizar e implementar.
.
Este paradigma funcional permite crear otras funciones de orden superior. Ademas de que la programación funcional prioriza el uso de la recursividad y funciones de de orden superior para resolver problemas.
.
Las funciones de orden superior pueden
.
Tomar una o mas funciones como parámetro.
Retornar una función como salida
.
Trata de disminuir o evitar los efectos colaterales. Son el resultado de una función que puede afectar a otra función.
.
Se origina en los años 30s cuando Alonzo Church desarrolla el cálculo lambda. En la misma década Alan Turing demuestra que las maquinas de Turing son equivalente al cálculo lambda y por lo tanto había cierta similitud por lo cual se podía trasladar a la programación.

EFECTOS SECUNDARIOS
.
Es comun hablar de efectos secundarios en la programación imperativa. Cuando se manejan funciones o variables de contexto global o que están delimitadas.
.
Es importante delimitar el scope de una variable así se garantiza que el código dentro de una función puede que no afecte a otra función.
.
Según la RAE el concepto de reacción no de efecto secundario es
.
“La forma en la que alguien o algo se comporta ante un determinado estimulo.”
.
Las funciones, variables, datos, archivos, programas pueden tener estímulos externos de otros datos o estructuras de datos, es por eso que la programación funcional los evita.
.
Estos efectos secundarios son cambios observables
.

  • Estado de la aplicación.
  • Valores en datos.
  • Modificación de archivos.
  • Peticiones a servidores.
  • Etc.

Peso corporal de un humano en diferentes etapas de su vida.

Las funciones lambda son muy similares a los delegados que se utilizan generalmente para definir eventos. Son superpoderosas estas funciones.

Pienso que algunos ejemplos de funciones impuras serían el precio de compra y venta del dólar, y el precio del bitcoin, por mencionar un par de ejemplos.

Ejemplo de función pura


function cuadradoDeUnNumero(n) {
    return n * n
}

Esta es una función pura debido a que siempre regresa el mismo resultado con la misma entrada, además de que se sabe de antemano cuál será el resultado.

Por ejemplo, siempre que n sea 10, la función siempre retornará 100.

Ejemplo de función impura


function numeroAleatorioElevadoALaN(n) {
    return Math.pow(Math.random(), n)
}

La función anterior es impura porque no siempre regresa el mismo resultado con la misma entrada, además, no se sabe con certeza cuál será el resultado debido al número aleatorio.

Por ejemplo, si n es igual a 3 y llamamos esta función dos veces, ocurriría algo como lo siguiente:

Si el primer número aleatorio es 0.8188, entonces retornará 0.5489509
Si el segundo número aleatorio es 0.0031, entonces retornará 2.9791e-8

En 4:57 hay un pequeño error: tendría que ser "A cada valor de salida y le puede corresponder más de un valor de entrada x"

- **Funciones como ciudadanas de primera clase**: Se refiere a que las funciones pueden ser asignadas a variables, pasadas como argumentos y retornadas desde otras funciones. Ejemplo: ```python def sumar(x, y): return x + y operacion = sumar print(operacion(2, 3)) # Output: 5 ``` - **Funciones de orden superior**: Son funciones que pueden recibir otras funciones como argumentos o devolver funciones. Ejemplo: ```python def aplicar(func, valor): return func(valor) print(aplicar(lambda x: x * 2, 4)) # Output: 8 ``` - **Funciones puras**: Retornan el mismo resultado para los mismos argumentos y no tienen efectos secundarios. Ejemplo: ```python def cuadrado(x): return x ** 2 print(cuadrado(4)) # Output: 16 ``` - **Funciones lambda**: Funciones anónimas que se definen en una sola línea. Ejemplo: ```python suma = lambda a, b: a + b print(suma(2, 3)) # Output: 5 ``` - **Efectos secundarios**: Cambios en el estado fuera de la función, como modificar una variable global. Ejemplo: ```python contador = 0 def incrementar(): global contador contador += 1 incrementar() print(contador) # Output: 1 ```
La programación funcional es un paradigma declarativo que usa **funciones** como “**ciudadanas de primera clase**”. Las funciones (en programación) son fragmentos de código reutilizables, que pueden recibir datos y dar salidas a otros datos como resultado, incluyendo otras funciones. Mediante la programación funcional se busca eliminar o reducir los **efectos secundarios**. En la programación funcional se pueden crear **funciones de orden superior (HOF)**. Prioriza el uso de **recursividad** y **HOF** para resolver problemas.
En éste punto ya admito que no he entendido absolutamente nada. Vengo de la escuela de web3 y me ponen este curso en la ruta, obviamente se requiere de un conocimiento previo que no tengo por lo que no entiendo que hace este curso ahí. Adicionalmente, se llama "historia de la programación", esta es la clase nueve, ya he consumido una hora de contenido y aún no hay nada de historia. No pongo en duda que el curso sea bueno pero está mal ruteado en la escuela de blockchain y web3

Una funcion recursiva es la que se llama asis misma, es para usar varias veces la misma funcion hasta obtener un resultado deseado un ejemplo con el que podria usar es la funcion factorial

Es interesante la forma de conocer y aprender de esta programacion funcional y como la usamos hoy en dia en nuestro dia dia. Nunca imagine que existieran estos tipos de funciones y son empleadas en muchas empresas por los mejores programadores. Recien que conozco, espero profundizar sobre esto.

Oiga profesor Hector, cuando vea mi comentario quiero decirle que usted es increíble. Estas clases de 10, 15, 20 minutos están superando las de la Universidad. Claramente el Talón de Aquiles es que no se puede interactuar con usted. Pero por lo demás, este curso es demasiado bueno.

Muy aburrida la explicación 😦

¿Qué es la programación funcional?

Mucho más claro temas que anteriormente solo se nombraron.

Resultado despues de entender las funciones de orden superior

Jeje buen ejemplo de las muñecas matrosca.

Paradigma Funcional Tiene como objeto imitar las funciones matemáticas lo más posible.
Posee la propiedad matemática de la transperencia referencial, lo que signficia que una expresión representa siempre el mismo valor, permitiendo razonar sobre la ejecución de un programa demostrando matemáticamente que es correcto.
Cuando se aplica una función, los argumentos pueden ser:

  • Evaluados antes de la función (Evaluación estructura).

  • Evaluación dentro de la función hasta el último momento y solo si se requiere para calcular el resultao final. (Evaluación postergada).

Wow, no sabia que el concepto de las funciones lambda de Python provenían de la década del 30 !!!

La programación funcional es un paradigma declarativo que usa funciones como “ciudadanas de primera clase”. Las funciones (en programación) son fragmentos de código reutilizables, que pueden recibir datos y dar salidas a otros datos como resultado, incluyendo otras funciones. Mediante la programación funcional se busca eliminar o reducir los efectos secundarios.

Muy buen curso y muy buen profesor !

.

“Un lenguaje de programación se dice que tiene Funciones de primera clase cuando las funciones en ese lenguaje son tratadas como cualquier otra variable. Por ejemplo, en ese lenguaje, una función puede ser pasada como argumento a otras funciones, puede ser retornada por otra función y puede ser asignada a una variable.”

Definición

La programación Funcional forma parte del paradigma declarativo, la cual utiliza funciones como ciudadanas de primera clase, es decir, que podemos trabajar las funciones como si fueran variables (argumento, retornar, modificar, etc).

Tipos de funciones

  • Las funciones puras son deterministicas, es decir, por cada entrada existe una sola salida, sin efectos secundarios. Ejemplo, operación matematica.
  • Las funciones impuras, al contrario que su contrario, son más generales, ya que pueden dar más de una salida por cada entrada. Ejemplo, la edad, el tiempo, etc.
  • Las funciones lambda, son conocidas como funciones anonimas, ya que no poseen nombre y sirven para tareas especificas. Se pueden asignar a variables.

Había visto en muchos cursos lo de las funciones lambdas. Es la primera vez que lo comprendo al 100%. Muy buena explicación!

Código complejo de hacer:

// Impura
const time = () => Date.now();
time(); // => 1521674192729
time(); // => 1521674402875

Código sencillo de hacer:
// Pura
const sum = (a, b) => (a + b);
sum(2, 3); // => 5
sum(2, 3); // => 5

Gracias!

En las funciones puras, más que “no incluye aleatoriedad”, entiendo que es más un “el mismo dato da siempre el mismo resultado”.