2010-11-22 9 views
8

Estoy planeando sumergirme en el paradigma de programación funcional y hacer que el proceso de pensamiento sea algo natural para mí. .Net/Mono es el único framework/modelo de objeto con el que estoy familiarizado y no quiero aprender ningún otro tipo de sistema. Eso hace que F # sea una consideración obvia ya que la carga de aprender un nuevo tipo de sistema no será un factor de distracción.¿Puede F # enseñarme buenas prácticas de programación funcional?

Pero mi preocupación es sobre el idioma en sí. ¿Será tan bueno como cualquier otro lenguaje de programación funcional clásico (por ejemplo, Haskell) para perforar FP en mi cráneo?

+1

Puede usar muchas de las ideas de FP en muchos idiomas diferentes. La pregunta no es si "perforará FP en mi cráneo": la pregunta es si fomentará buenos hábitos de PF o malos. –

Respuesta

4

Sí, definitivamente lo ayudará a aprender programación funcional. F # también admite la programación orientada a objetos, por lo que el cambio debería ser más fácil. Si desea pasar finalmente a un lenguaje completamente funcional, podría hacerlo, pero en realidad encuentro la combinación de OO y FP mejor que OO o FP solo (soy un programador de Scala, que es como F #).

2

paradigma de programación funcional? Haskell viene inmediatamente a la mente. Por cierto, no hay herencia marco en Haskell. Por lo que yo sé, su framework es una ventana de terminal y un editor de programación.

Si desea un lenguaje de programación funcional que esté en su .NET framework, tendrá que seguir con F #.

IronPython, pero el camino, no es un lenguaje de programación funcional.

+3

Sí, de hecho, IronPython no solo no es un lenguaje de programación funcional, no es un lenguaje de programación * en absoluto *, es un compilador para el lenguaje de programación Python (que tampoco es un lenguaje de programación funcional). –

9

Creo que el beneficio de aprender programación funcional con F # (especialmente si ya tiene experiencia con C# y .NET) es que le resultará mucho más fácil crear un proyecto divertido.

  • Una de las razones es que ya está familiarizado con las bibliotecas .NET (que son de fácil acceso desde F #)
  • La segunda razón es que F # no es puro, por lo que puede empezar a escribir código que funciona y luego mejorarlo para hacerlo más funcional.

F # admite múltiples paradigmas, pero es principalmente un lenguaje funcional (en comparación con Python o C# que también admiten múltiples paradigmas, pero que no son principalmente funcionales). Esto hace que sea más fácil forzarse a usar el estilo funcional. Es más fácil evitar patrones imperativos, porque son más difíciles de escribir en F # (y el código se ve peor).

Creo que una vez que "obtenga" la programación funcional básica, será más fácil aprender otros lenguajes funcionales si todavía está interesado. Definitivamente es bueno saber un poco sobre Haskell o Scheme, porque son más radicales (de alguna manera).

Si eres bueno entendiendo los conceptos sin utilizarlos en algunos proyectos reales, entonces comenzar con un lenguaje clásico usando algún libro clásico también puede ser una buena opción (por ejemplo, Haskell School of Expression o Structure and Interpretation of Computer Programs). No me refiero a esto en ningún sentido negativo: personalmente me gusta mucho leer libros técnicos sin probar ejemplos, porque todavía puedo tomar los conceptos interesantes de solo leer (y para la práctica, siempre hay Google). Por supuesto, puede escribir un código en Haskell o Scheme, pero como programador .NET, probablemente le resulte más divertido escribir código F # ...

3

F #, en muchos aspectos, puede ser mejor que la mayoría de los "otros lenguajes de programación funcional clásicos [s]". Como usted ya sabe .NET, podrás aprovechar al máximo todo el conocimiento de su .NET al recoger dos cosas útiles a partir de F #:

  1. El paradigma de programación funcional. Es decir, cómo programar en el estilo de FP. Puedes usar eso en cualquier idioma. A menudo aprendo hacia FP en mi código C#, porque considero que es una forma mucho más fácil de mantener y reutilizable para escribir software.

  2. La sintaxis de programación funcional de un idioma. F # es muy similar a OCAML, y la familia ML constituye uno de los 3 dialectos principales de los lenguajes de FP. Los otros dos grandes son la familia Miranda (de la cual Haskell es el principal representante moderno) y la familia LISP (donde Common Lisp y Scheme son los dos grandes representantes).

En F #, podría ayudarlo a hacer la distinción muy claramente entre los tipos F # y .NET. Los registros, tuplas y uniones discriminadas son (casi) puramente cosas F #, y se utilizan en casi todos los idiomas funcionales. Úselos mucho si quiere aprender FP. Las clases, estructuras e interfaces también están allí, pero esos son conceptos de .NET. Úselos según sea necesario, pero trate de evitarlos en general, para que no termine escribiendo "C# con una sintaxis tonta" en lugar de F # idiomático.

Las cosas que realmente se perderá de Haskell son la verdadera pureza (eh, no tanto), la evaluación perezosa por defecto (un gran cambio) y las clases de tipo. Puedes hacer la evaluación diferida en F #, pero tienes que usar las clases explícitas Lazy <> para obtenerla. Tener evaluaciones flojas en todas partes es una de las cosas realmente únicas y poderosas en Haskell, pero no es un concepto de FP estricto. Las clases de tipo son muy potentes, pero puedes arreglártelas sin ellas para la mayoría de las situaciones del mundo real. Son solo un nivel más alto de abstracción que reduce la repetición y la placa de la caldera.

La verdadera pureza suele ser más académica. Tiene ciertas ventajas, pero si ya está acostumbrado a las técnicas impuras y de .NET, en su mayor parte solo le resultará difícil trabajar hasta que haya adquirido completamente la mentalidad de FP.

Cuestiones relacionadas