2010-02-04 24 views
9

Duplicar posibles:
What are the benefits of using C# vs F# or F# vs c#?¿Cuáles son las ventajas de F # sobre C# para el desarrollo de aplicaciones empresariales?

Mi equipo está usando C# .NET para desarrollar aplicaciones empresariales para nuestra empresa. Tenemos un historial de desarrolladores de Winforms, pero ahora nos estamos moviendo hacia SilverLight.

Mi jefe recientemente vio un video en F # y pensó que se veía muy emocionante, y me ha pedido que lo revise. Mi pregunta es esta: ¿qué ventajas tendría un lenguaje funcional (como F #) sobre un lenguaje OO (como C#) en el ámbito del desarrollo de aplicaciones empresariales?

Realmente quiero ver si hay alguna razón convincente para siquiera comenzar a contemplar un cambio. También es bueno ver algunos códigos de comparación F # y C#.

+4

¿La recomendación de su jefe no es lo suficientemente convincente para comprobarlo? :) –

+5

Una cosa a tener en cuenta, dependiendo del tamaño y la experiencia de su equipo: no subestime el impacto de productividad inicial que va a tomar cambiar de un idioma * y enfoque * el equipo sabe a uno que tienen que aprender. No se trata solo de aprender la sintaxis, sino de entenderla a un nivel profundo, aplicarla correctamente a la estructura general, etc. No decir que no vale la pena (no sé nada de F #, en realidad), solo eso cambiar de OOP basado en clase a funcional OOP basado en programación o prototipo (como JavaScript) es un esfuerzo no trivial que requiere un caso comercial no trivial. –

+3

@ T.J. Crowder - secundó. No se debe subestimar todo el imperativo del cambio de mentalidad funcional. –

Respuesta

10

Puede expresar muchos conceptos de forma mucho más concisa en un lenguaje funcional como F #.

Las funciones son objetos de primera clase y se pueden aplicar directamente a colecciones para realizar transformaciones/filtros de manera mucho más eficiente.

Se fomenta la inmutabilidad en los lenguajes funcionales, y esto hace que (por ejemplo) el código multiproceso sea mucho más confiable (usted sabe que las estructuras de datos no cambian debajo de usted).

Al poder escribir código de subprocesos múltiples de forma más confiable y más fácil, es mucho más fácil aprovechar múltiples procesadores/núcleos (cada vez más importante ahora la ley de Moore no aplica mucho).

Tenga en cuenta que puede usar sus objetos C# existentes dentro de F #. Como tal, es posible que desee escribir ciertas partes de su código en F # y otras partes en C#. Debería poder mezclar y combinar según sus requisitos y la idoneidad de cada enfoque.

+5

+1 Multithreading es trivial sin efectos secundarios. Después de todo, si no está escribiendo estado, no hay necesidad de bloquear nada. – Joel

4

acabo de pedir especialmente cómo se compara con C#, y la programación orientada a objetos

lo que estoy viniendo la dotación 'Real World Functional Programming', que hace un trabajo fantástico de explicar todos los rincones y grietas de F #, la programación funcional, y es que la programación funcional en general aumenta el 'rigor' de sus programas, asumiendo que se ajusta a los principios de las funciones libres de efectos secundarios y la inmutabilidad.

Además, parece que hay beneficios para pensar en el código en un sentido declaritivo, en lugar de un sentido imperativo. En OOP tiendo a pensar en los pasos necesarios para lograr algo, pero en FP parece que le preocupa más cómo quiere aplicar funciones a los datos para obtener resultados.

2

En primer lugar se pregunta "el lenguaje funcional (como F #) da más de un idioma OO (como C#) i" f # es funcional y OO. cualquier cosa que escribirías en C# se puede traducir directamente a f #. F # es un lenguaje multi paradigma, pero la ventaja proviene de la parte funcional en mi opinión. f # y otros lenguajes funcionales son un claro ganador cuando se trata de escribir aplicaciones de múltiples hilos debido a las mayores posibilidades para el compilador de razonar sobre qué se puede ejecutar de forma segura en paralelo.

Cuando se trata de desarrollo web f # tiene un kit de herramientas muy genial que le permite escribir todo el código (en el lado del servidor y del lado del cliente) en el mismo idioma alias f #.el lado del cliente se traducirá a JavaScript mediante el kit de herramientas web.

+3

Si bien ambos modos de uso son compatibles, F # es un lenguaje funcional con características imperativas, y C# es un lenguaje imperativo con características funcionales. Sería extremadamente tedioso poner 'mutable' en cada declaración. Además, la programación imperativa inhibe la capacidad de F # para hacer coincidencia de patrones e inferencia de tipo. – Joel

+0

@Joel bien según Don Syme uno de los principales arquitectos de F # mi afirmación acerca de que F # es multiparadigm es cierto. Estoy simplemente parafraseando a su experto en libros F # y su imcorrect en el mutable que no necesita para hacer OO en F # solo si desea que las cosas se puedan modificar y, por último, también se equivoca en la coincidencia de patrones. OO en F # _se_ puede combinarse con la coincidencia de patrones. Uno de los objetivos de correo de F # era combinar los mundos de OO y FP y la inferencia de tipo por cierto funciona incluso con clases no F #. –

Cuestiones relacionadas