software - scala lenguaje de programacion ejemplos
Mezclando programación orientada a objetos y funcional. (12)
¡Rubí! En Ruby, todo es un objeto (incluso literales), y también tiene soporte completo de programación funcional.
¿Qué lenguajes están disponibles que promueven la programación tanto orientada a objetos como funcional? Sé que cualquier lenguaje que admita funciones de primera clase puede considerarse funcional, pero estoy buscando una sintaxis que esté dirigida específicamente a ambos estilos de codificación.
Al usar ese lenguaje, me imagino aislando todos los cambios de estado en una sola parte del código y haciendo que el resto del programa sea puramente funcional. Solo de pensarlo me hace babear (¡depurando el cielo!).
Hasta ahora he descubierto a Scala aunque solo acabo de escucharlo (y se ve increíble). ¿Hay grandes contendientes en este paradigma de "estilo mixto"?
DO#. Es imperativo, lo que puede ser útil, pero también tiene muchas características funcionales. Lambdas, iteradores y LINQ son funcionales.
Probablemente no sea atractivo para los puristas, pero funciona para mí.
JavaScript, Python y Ruby podrían usarse de esa manera, pero Scala sube de nivel al escribir la función de forma estática y trabajar bajo JVM.
Javascript: OO y functional .
Los más conocidos son OCaml y F# (que pueden describirse vagamente como OCaml para .NET).
Hay muchos otros lenguajes de múltiples paradigmas, como Oz , pero en su mayoría tienen valor pedagógico. Por el contrario, OCaml es muy práctico. Es casi tan rápido como C y casi tan hermoso como Haskell :)
Los lenguajes de scripting populares como Python y Ruby también le permiten programar en un estilo funcional. Sin embargo, no proporcionan una de las instalaciones más sólidas que tienen los lenguajes funcionales "clásicos" (así como OCaml): coincidencia de patrones (no confunda con regexp).
Me pregunto por qué está buscando un lenguaje que fomente específicamente mezclarlo en lugar de hacerlo de todos modos con un lenguaje que haga bien la programación funcional y la programación OO. Se podría aplicar fácilmente con Python, Ruby, Perl o lenguajes interpretados similares. Además, los lenguajes OO basados en C tienden a mezclar C puro con características OO, por ejemplo, el Objetivo C podría escribirse fácilmente de esa manera si lo eligiera.
EDITAR: Me han informado que soy incorrecto, he dejado esta respuesta aquí en caso de que alguien pueda aprender de mi error, vea los comentarios.
Mientras no insista en la "pureza", Common Lisp satisface todas sus necesidades.
OCaml y F # son los idiomas más populares que mezclan OOP y FP, que yo sepa.
La mayoría de los lenguajes, como Ruby, mezclan la programación funcional, pero mucha gente ni siquiera se da cuenta. Encuentro lenguajes como ese que dejan mucho que desear en el frente de la sintaxis y demás.
Python, javascript, lisp común, ruby, smalltalk, haskell y ocaml, en la parte superior de mi cabeza. No es realmente una combinación exótica.
Realmente estás haciendo la pregunta equivocada. Su pregunta se basa en la existencia de una distinción entre programación "OO" y "funcional". Esta distinción no es interesante o relevante. De hecho, de acuerdo con los criterios de "función de primera clase compatible", incluso Java es funcional .
Pero golpeas el clavo en la cabeza con "puramente funcional". Eso es lo interesante. ¿Qué idiomas te ofrecen transparencia referencial y pureza así? Bueno, la mayoría de ellos, si eres muy cuidadoso. Pero no muchos de ellos realmente garantizan que sus funciones sean puras. Solo puedo pensar en un par de idiomas que te ofrecen eso.
Uno de ellos es Haskell . En Haskell, usted escribe programas que son puramente funcionales de principio a fin. Los efectos secundarios se delegan a una estructura de datos llamada IO, y el estado se maneja pasándolo a través de funciones puras o encapsulándolo en mónadas. De modo que tiene su "cielo de depuración" en el que solo una pequeña parte de su código interactúa con el estado global y el resto de su programa es puro, y el lenguaje impone la pureza.
Haskell : Puro funcional, prácticamente sin OO, pero adelante, sumérgete. :RE
Scala : la hermosa mezcla de OO y FP, posiblemente podría superar al java como lenguaje principal en la JVM en una década o 2. Me gusta porque trae la programación funcional a la plataforma java, algo que es sumamente necesario en mi humilde opinión.
C # : impresionante soporte para OO, además de ser más funcional (funciones de primera clase ya, veremos qué mejoras trae .net 4)
F # : lenguaje .net Construido para ser específicamente funcional, a diferencia de C #, que originalmente fue concebido para cosas OO.
Python : genial para OO, pero no es adecuado para FP
Javascript : admite funciones de primera clase, pero no está diseñado específicamente para FP como Scala y F #. Todavía un poco mejor que Python en mi humilde opinión.
¿Por qué quieres mezclar OO y FP? ¿Como escalón?
- OCaml
- O''Haskell (y la programación orientada a objetos es algo posible incluso en Haskell normal )
- Nemerle
- Posiblemente newLISP
Además, muchos lenguajes de scripting como Python, Ruby, Lua, etc. tienen esta capacidad, pero carecen de muchas de las características interesantes de lenguajes funcionales como los tipos de datos algebraicos y la comparación de patrones.