Cita:
Empezado por roman
Y esto, ¿no es como un retroceso? ¿De qué va este haskell? ¿Es similar a lisp? ¿En qué áreas se usa?
// Saludos
|
Retroceso en que?
Algo que me tomo tiempo entender es que no existe una linea ascendete tipo:
Programacion Imperativa < Estructural < Objetos
Sino familias de lenguajes. Por lo tanto, no hay retroceso en pasar de una familia a otra (algo que hacemos todo el tiempo, por ejemplo al usar un lenguaje declarativo como SQL o HTML).
La programacion funcional es la OPUESTA a la orientada a objetos. En OO se tiende a enfatizar todo en el sustantivo, mientras en la funcional en el paso de datos.
La primera vez que entendi la diferencia fue leyendo:
http://steve-yegge.blogspot.com/2006...-of-nouns.html
P.D: Al igual que todo "estilo", la programacion funcional puede ser incorporada en otros lenguajes que son OO, y la OO se puede introducir en otros lenguajes no OO (como por ejemplo, cuando se simular OO en C).
Esto significa que no hay que sacrificar -del todo- la herramienta que conozco ahora, por una totalmente diferente.
Un ejemplo simple, en python (python es
multi-paradigma: OO, procedural, funcional, imperativo):
Tradicional, imperativo (con efectos colaterales):
Código PHP:
amigos = ['a','b','c']
amigos.sort()
for amigo in amigos:
print amigo.upper()
Funcional (sin efectos colaterales):
Código PHP:
amigos = ['a','b','c']
[amigo.upper() for amigo in sorted(amigos)]
Una buena discusion de cuando se usa un estilo u otro:
http://stackoverflow.com/questions/2...ed-programming
La programacion funcional ha sido casi siempre un "nicho" oscuro, ppalmente porque sus proponentes son muy de la academia y meten una terminologia y casos de usos muy cienti/matematico/esoterico que es dificil de resonar con el programador promedio, pero ultimamente sus conceptos mas utiles se han ido pegando en varios lenguajes. Por ejemplo:
Soporte a
Closure y funciones de primero orden
Uso de
funciones anonimas / lambdas
Tambien han ido surgiendo lenguajes como F#, Scala, Clojure que tiene un punto de vista mas "normal" de la programacion funcional y que como corren sobre un runtime como .NET/Java permiten importar codigo OO.