2010-07-15 15 views
13

Soy un desarrollador de Java/C++ que nunca pasó tiempo aprendiendo C# y la base .NET relativa.Aprendiendo .NET desde F # sin C#

Luego aprendí OCaml porque tuve que usarlo para mi tesis de maestría, así que me enteré de F # y me pregunté: ¿F # me permitirá utilizar fácilmente la API .NET para crear aplicaciones con todas las funciones (que pueden incluir GUIs, sockets, lo que sea) sin ningún problema?

Pregunto esto porque parece que la sintaxis y los conceptos de F # son bastante similares a OCaml y cuando son diferentes es solo porque se utiliza un enfoque más OOP, así que el conocimiento de Java me ayudaría a llenar esos huecos ... si F # es capaz para utilizar los mismos recursos que C# sin la necesidad de aprender la sintaxis de C#, realmente lo consideraría ... ¿vale la pena intentarlo?

Aparte de eso, ¿los libros disponibles en Amazon para F # (principalmente un libro de O'Reilly y 3-4 libros de Apress) son buenos para aprender técnicas avanzadas? Porque ahora soy bastante aficionado a la programación funcional, pero nunca funcionó en la plataforma .NET, así que realmente no sé por dónde empezar.

Gracias de antemano

+5

Si ya conoces Java, entonces no es demasiado difícil elegir la sintaxis de C#. Consulte esta publicación para obtener información sobre la programación de la GUI en F # http://stackoverflow.com/questions/2796272/how-to-learn-gui-programming-in-f – Longball27

+1

No me gustaría elegir C# solo porque descubrí la programación funcional y me gustaría profundizar en .NET desde ese punto de vista ... – Jack

+0

Veo y simpatizo con su punto, y estoy seguro de que le gustará F # (que en realidad se basa en OCaml, e incluso tiene un modo de compatibilidad OCaml) Pero me gustaría señalar que C# tiene soporte para cierres completos y funciones de primer orden, y es posible programar con un estilo muy funcional incluso allí. Lo único que extraño cuando hago esto es la inferencia tipográfica. – harms

Respuesta

10

Si usted sabe algunos idiomas ya como usted dice, Experto F # 2.0 por Don Syme es una excelente teniendo en cuenta la profundidad de F #.

En su mayoría tendrá dificultades para aprender las bibliotecas, pero la referencia MSDN es bastante buena.

Creo que definitivamente vale la pena intentarlo. Conocer C# no le dará grandes ventajas en el aprendizaje de F #, aparte de la experiencia con el marco.

+0

+1 - El experto F # fue fácilmente el libro más interesante que leí el año pasado. –

4

En mi experiencia, necesita algo de C# para aprender F #, especialmente para la parte .Net.

Similar a su situación, no conocía ninguna .Net y C# antes de aprender F #. La primera parte difícil para mí es la programación IO asíncrona. Lo entiendo completamente hasta que leo el capítulo de sincronización de CLR via C#. Y pronto descubrí que lo que me molestaba no era la expresión de computación/mónadas, es .NET. Luego sigo leyendo CLR a través de C#, p. Sé que en .Net 1d array es eficiente, sin embargo 2d array no es tan eficiente. También conozco delegados y eventos en .Net.

.Net es imprescindible. C# es el tono de la madre para .Net. En mi humilde opinión, aprender C# (al menos leer C#) se requiere para un programador F #.

6

hará F # me permite utilizar fácilmente la API .NET para construir con todas las funciones aplicaciones (que pueden implicar GUI, tomas de corriente, lo que sea) sin ningún problema ?

Espero ver algunas perspectivas diferentes aquí; Ofreceré el mío.

Hay algunos aspectos a un 'lenguaje' que afectan a la facilidad con/sin problemas se puede construir aplicaciones 'con todas las funciones' con él:

  • el lenguaje mismo
  • la biblioteca/marco es emparejado con
  • las funciones de herramientas de integración (IDE)
  • de apoyo exterior (muestras, bibliotecas 3 ª parte, la comunidad)

F # es un lenguaje excelente, cuyo núcleo se basa en OCaml. Comparte la misma biblioteca/framework (.NET) como C#, y así con respecto a las dos primeras viñetas, F # es tan capaz como C# para construir tales aplicaciones.

F # es un número de años más joven que C#, por lo tanto, tanto las herramientas de Visual Studio como la comunidad/muestras no son tan maduras como las de C#. En este momento, hay menos 'plantillas de proyecto' y 'diseñadores' que trabajan con F # en el recuadro VS, y es más difícil encontrar muestras/bibliotecas. La comunidad F # es excelente y está comenzando rápidamente a completar los agujeros de la cuarta viñeta (e incluso a la tercera parte), pero para crear aplicaciones que dependan en gran medida de la tercera y cuarta viñetas, C# todavía tiene una ventaja hoy (Julio de 2010). Sí, puedes construir lo que quieras hoy con F #, pero aún hay casos en los que la experiencia de extremo a extremo con C# será más suave/más fácil.

2

Una cosa que aún falta en F # en Visual Studio son las herramientas que ayudan a automatizar el proceso de diseño de la interfaz de usuario. Estos son bastante sofisticados en el caso de C#, pero en F # tendrá que hacer todas las tuberías a mano. Entonces, si su objetivo es aprender a producir aplicaciones WPF (etc.), C# es actualmente una mejor apuesta. Si su objetivo es aprender los detalles mecánicos de .NET, WPF (etc.), cualquier idioma funcionará.

Un enfoque aún mejor, en mi opinión, es aprender los dos - F # y C# - en tándem. Su experiencia con Java y OCaml le da una buena ventaja tanto en C# como en F #. Use C# para cuidar la UI, y F # para hacer el trabajo subyacente.

+0

¿Quiere decir que es posible mezclar fácilmente C# y F # y dejar que C# se preocupe por la GUI (por ejemplo) mientras que F # se usa para la lógica del programa? ¿Pueden interactuar uno con el otro sin problemas? – Jack

+0

@Jack "sin problemas" podría ser una palabra demasiado fuerte. Deberá mantener su F # en un ensamblaje separado (como un paquete de Java) desde su C# y GUI. También es probable que se enfrente a algunos desafíos menores donde los dos interactúan entre sí. –

+0

Existe alguna funcionalidad F # diseñada específicamente para trabajar con ese idioma, y ​​es difícil de usar desde C#, pero F # es un lenguaje .NET completo. Como tal, es bastante simple escribir clases y funciones que no son diferentes a las funciones referenciadas de cualquier otro lenguaje .NET, ya sea C#, MC++ o VB. Las partes portátiles de la funcionalidad son bastante simples de aprender y seguir recto. Un libro F # o ejemplos en línea de F # proporcionarán ejemplos de entremezclas F # y C#. Tal vez no perfectamente perfecta, pero al menos indolora sin problemas, jajaja. – TechNeilogy

1

La respuesta simple es: "sí", F # tiene acceso completo a todas las bibliotecas .NET y puede consumir y producir código escrito en o para cualquier otro lenguaje .NET, así como la interfaz directa con COM y DLL nativas.

Dicho esto, el soporte de herramientas para F # no es tan maduro como el de C#. Si bien es posible que le resulte un poco más fácil aprender .NET con C#, no estará intrínsecamente limitado si comienza con F #.

Lo más significativo es el constructor de interfaz gráfica de usuario no puede producir actualmente F # Código, no se puede producir páginas de código subyacente de ASP.NET de tipo fuerte (pero puede crear tipos débiles unos), y no hay apoyo directo para la creación de pruebas de F # (pero plugins existen que hacen).

Sin embargo, uno puede escribir fácilmente el código de la GUI a mano en F #, y a menudo es más fácil de hacerlo y bastante más escueto que el equivalente de C#. Por ejemplo, las propiedades se pueden establecer en el constructor; Por ejemplo, deje que f = new Form (Text = "Window Title") y las funciones lambda se conviertan en delegados automáticamente; por ejemplo, event.Add (fun e -> doSomething()).

También es posible, por ejemplo, crear una DSL para describir la interfaz de usuario. Para obtener un poco más de información, vea F#: is there no UI (like WPF) for it?

Un estilo recomendado, como lo señala TechNeilogy, es escribir la lógica en F # como una biblioteca, y llamarla desde una GUI creada en C#.

+0

Ah, y el soporte de F # para escribir código asincrónico y paralelo es simplemente maravilloso. Es * mucho * más fácil escribir E/S correcta sin bloqueo en F # que en cualquier otro idioma con el que haya trabajado. –

+0

Una excepción a la "interfaz con cualquier cosa" es que actualmente no hay soporte de nivel de idioma para objetos dinámicos creados en, digamos, IronPython o IronRuby. Si bien es posible interactuar con dichos objetos, esto no será tan fácil como, por ejemplo, usar VB o C#. –

1

Voy a decir "No". El desafío de aprender F # es cambiar su mentalidad de programación, recursión, función de alto orden, coincidencia de patrones, etc. Muy importante, debe pensar en programar de una manera "funcional", no imprescindible como C# o Java. Aprender API siempre es fácil, pero aprender a diseñar aplicaciones no lo es.

Ese es mi 2 centavos.

+1

Solo para señalarlo, el OP ya conoce OCaml, que es un lenguaje hermano para F #, por lo que escribir código en F # compatible en gran medida no debería representar ningún desafío. –