Recientemente me ha preocupado más la forma en que escribo mi código. Después de leer algunos libros sobre patrones de diseño (y su implementación demasiado entusiasta, estoy seguro), he cambiado mucho mi pensamiento para encapsular lo que cambia. Tiendo a notar que escribo menos interfaces y más código orientado a métodos, donde me encanta arreglar la vida en clases antiguas con predicados, acciones y otras tareas delegadas. Tiendo a pensar que a menudo son las acciones las que cambian, así que las encapsulo. Incluso a menudo, aunque no siempre, descompongo las interfaces en un solo método, y luego prefiero usar un delegado para la tarea en lugar de forzar el código del cliente para crear una nueva clase.
Entonces supongo que me golpeó. ¿Debería estar haciendo programación funcional en su lugar?
Editar: puedo tener una idea errónea sobre la programación funcional.
Actualmente mi lenguaje de elección es C #, y vengo de un fondo C ++. Trabajo como desarrollador de juegos pero actualmente estoy desempleado.
Tengo una gran pasión por la arquitectura. Mis virtudes son código limpio, flexible, reutilizable y mantenible. No sé si he sido envenenado por estas formas o si es para mejor. ¿Tengo fiebre refactorizante o debo seguir adelante? Entiendo que esta podría ser una pregunta sobre "usar la herramienta adecuada para el trabajo" , pero me gustaría escuchar sus pensamientos.
¿Debo elegir un lenguaje funcional? Uno de mis factores de miedo es dejar la comodidad de Visual Studio.
fuente
Respuestas:
SI
Aprender cosas nuevas debería ser divertido. Y aprender una nueva forma de programar debería hacerte un mejor programador. Marque uno de Haskell o Erlang, ambos son funcionales pero son muy diferentes. Si elige a Haskell, busque algunas charlas de "Simon Payton Jones" en YouTube o podcasts. El chico es un gran orador.
fuente
Santo * * * *. No hay bala de plata. Bajar. Relájate, respira hondo.
El hecho de que tenga una herramienta en su caja de herramientas no significa que esté obligado a usarla. Concéntrese en la tarea en cuestión, es decir, escribir un programa que funcione y refactorice cuando el código huela mal. No encapsule y resuma cada pequeño detalle solo porque pueda cambiar algún día en el futuro. En mi opinión, es mucho mejor comenzar directamente, KISS & YAGNI, y reaccionar ante los requisitos cambiantes cuando realmente cambian .
No creo que nadie aquí pueda decirle si un lenguaje funcional es más adecuado para sus necesidades. Porque no nos dijiste en qué estás trabajando.
fuente
Puedes recoger F # . Es un lenguaje funcional .NET, que le permitirá usar Visual Studio y reutilizar gran parte de su conocimiento .NET. Sus ensambles, por supuesto, se integran con ensamblajes de C # sin problemas (lo que le permite combinar fácilmente C #, C ++ / CLI y F # en un proyecto). El soporte F # viene con VS Pro o mejor, aunque no estoy seguro de si está habilitado de forma predeterminada.
fuente
En mi opinión, vale la pena probar un lenguaje funcional. Incluso si nunca lo usa directamente en un producto lanzado, aprenderlo seguramente ayudará a dar una perspectiva / punto de vista algo diferente sobre la programación. Incluso si terminas haciendo toda tu codificación "real" en C #, es muy probable que te ayude a mejorar el código que escribes en C #.
Como otros han mencionado, la opción obvia para alguien acostumbrado a Visual Studio es F #, que es básicamente un derivado de Ocaml / Caml / ML. En mi opinión, esa fue una buena opción por parte de Microsoft para presentar a la gente la programación funcional: es un lenguaje funcional completo, pero no tiene una sintaxis tan extraña como la tienen algunos (por ejemplo, mientras que los lenguajes basados en Lisp sí lo tienen). tienen ventajas reales, los principiantes casi siempre tienen dificultades para leer).
fuente
Si deberías.
Si elige uno puro, como Haskell, aprenderá no solo un nuevo idioma, sino también una nueva forma de pensar. Esto también puede ayudarlo más adelante en su trabajo de procedimiento / OO.
F #, por otro lado, no es puro, por lo que puede perderse fácilmente lo que es importante en la programación funcional. Usted puede, por así decirlo, continuar escribiendo programas de procedimiento que mutan una variable aquí, realizar algunos efectos secundarios allí, solo en la sintaxis de F #.
fuente
Si ya está usando C #, no necesita un nuevo lenguaje: con la combinación de métodos de extensión, lambdas y los tipos genéricos Func / Action, es bastante fácil escribir código funcional en C #, de esa manera puede usar un estilo funcional en los algoritmos donde tiene más sentido sin necesidad de cambiar toda la aplicación.
fuente