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 鈥渉ola 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 鈥淴鈥 y genera un valor 鈥淵鈥.

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 鈥渃iudadanas 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 59

Preguntas 9

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

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 鈥淐iudadanas 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 鈥淐iudadanas 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 鈥淴鈥 y genera un valor 鈥淵鈥

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?
-鈥na 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.

les recomiendo el canal de 鈥樷楾raductor de Ingenieria鈥欌, es un matematico que explica EXCELENTE las matematicas y de ingenieria, se los super recomiendo.
Aca tiene un video hablando de funciones, esto es para entender a las funciones de manera matematica.
https://www.youtube.com/watch?v=ojiMGOqwwCE&t=1463s

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.

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.

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

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

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

Hay un error en el concepto de 鈥渇unci贸n pura鈥 y la funci贸n cuadr谩tica.
El profesor dice 鈥減or 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.

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 鈥渜u茅鈥 estamos haciendo y no en 鈥渃贸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);

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.

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 鈥渜u茅鈥 estamos haciendo y no en 鈥渃贸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.

c谩lculo lamda
Es un concepto importante para comprender la programaci贸n funcional

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

Programaci贸n funcional: Paradigma que utiliza funciones como 鈥渃iudadanas 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 == 鈥淩elaci贸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#

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.

FUNCIONES
.
Segun la RAE una funci贸n es la
.
鈥淩elaci贸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 鈥淴鈥 y genera un valor 鈥淵鈥.
.
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.

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
.
鈥淟a 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"

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 鈥渃iudadanas 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 !

En R:

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

.

鈥淯n 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 鈥渘o incluye aleatoriedad鈥, entiendo que es m谩s un 鈥渆l mismo dato da siempre el mismo resultado鈥.