Pregunta

¿Qué lenguajes están disponibles que promueven la programación funcional y orientada a objetos? Sé que cualquier lenguaje que admita funciones de primera clase puede considerarse funcional, pero estoy buscando una sintaxis específica para ambos estilos de codificación.

Usando dicho lenguaje, me imagino aislando todos los cambios de estado en una sola porción de código y haciendo que el resto del programa sea puramente funcional. Solo pensar en eso me hace babear (¡depurando el cielo!).

Hasta ahora he descubierto Scala aunque acabo de enterarme de ello (y Se ve increíble). ¿Hay grandes contendientes en este " estilo mixto " paradigma?

¿Fue útil?

Solución

Los más conocidos son OCaml y F # (que puede describirse vagamente como OCaml para .NET).

Hay muchos otros lenguajes de paradigmas múltiples, como Oz , pero tienen mayormente 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 populares lenguajes de script 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 "clásico" los lenguajes funcionales (así como OCaml) tienen: coincidencia de patrones (no lo confunda con regexp) .

Otros consejos

Javascript: OO y funcional .

Además, muchos lenguajes de script como Python, Ruby, Lua, etc. tienen esta capacidad, pero carecen de muchas de las características agradables de los lenguajes funcionales, como los tipos de datos algebraicos y la coincidencia de patrones.

OCaml y F # son los lenguajes más populares que mezclan OOP y FP, que yo sepa.

La mayoría de los lenguajes, como Ruby, mezclan programación funcional, pero mucha gente ni siquiera se da cuenta. Encuentro que idiomas como ese dejan mucho que desear en el frente de sintaxis y tal.

Haskell : puramente funcional, prácticamente sin OO, pero adelante, sumérgete. : D

Scala : Una hermosa combinación de OO y FP, posiblemente podría superar a Java como lenguaje principal en la JVM en una década o 2. Me gusta porque trae programación funcional a la plataforma Java, algo que es realmente necesito 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 Creado para ser funcional específicamente, a diferencia de C #, que originalmente fue concebido para material OO.

Python : ideal para OO, pero no es adecuado para FP

Javascript : admite funciones de primera clase, pero no está específicamente diseñado 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 un trampolín?

C #. Es imprescindible, lo que puede ser útil, pero también tiene muchas características funcionales. Lambdas, iteradores y LINQ son todos funcionales.

Probablemente no atraerá mucho a los puristas, pero funciona para mí.

JavaScript, Python y Ruby podrían usarse de esa manera, pero Scala sube un nivel. escribiendo la función estáticamente y trabajando bajo JVM.

Realmente estás haciendo la pregunta equivocada. Su pregunta se basa en que existe una distinción entre " OO " y funcional programación. Esta distinción no es interesante ni relevante. De hecho, de acuerdo con '' admite la función de primera clase '' criterios, incluso Java es funcional .

Pero golpeas el clavo en la cabeza con "puramente funcional". Esa es la parte interesante. ¿Qué idiomas le ofrecen transparencia referencial y pureza como esa? Bueno, la mayoría de ellos, si tienes mucho cuidado. Pero no muchos de ellos realmente garantizan que tus 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. Entonces tienes tu "cielo de depuración" donde solo una pequeña porción de su código interactúa con el estado global y el resto de su programa es puro, y el lenguaje impone la pureza.

Mientras no insista en "pureza", Common Lisp respalda todas sus necesidades.

Me pregunto por qué está buscando un lenguaje que fomente específicamente mezclarlo en lugar de hacerlo de todos modos con un lenguaje que hace bien la programación funcional y la programación OO. Podría aplicarse 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 desea.

EDITAR: Me han informado de que soy incorrecto, he dejado esta respuesta aquí en caso de que alguien pueda aprender de mi error - ver comentarios.

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.

Ruby! En Ruby, todo es un objeto (incluso literales), y también tiene soporte de programación funcional completo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top