2009-04-20 10 views
11

Estaba leyendo la siguiente pregunta: How safe would it be to use functional-java to add closures to a Java production project? y también he estado pensando en usar el Functional Java project en mi proyecto actual. Me preguntaba qué experiencia tienen los usuarios de Stack Overflow con el uso del proyecto Functional Java. En particular, tengo curiosidad acerca de algunos de estos detalles:¿Cuáles son sus experiencias con el proyecto funcional de Java?

  • ¿Aumentó la calidad o la claridad del código?
  • ¿Mejora la productividad?
  • ¿Reduce los posibles puntos de falla?
  • ¿Rendimiento de impacto?

Respuesta

9

He estado en un equipo que usa la biblioteca de FJ, y sé de otros. En un equipo, se utilizó como reemplazo de una biblioteca local menos pulida, en otro reemplazó Google Collections. También conozco algunas personas que copian el código fuente de FJ para implementar su propia implementación.

En mi opinión, si debe usar Java, debe utilizar algo como Java funcional para facilitarle la vida.

¿Ha aumentado la calidad o la claridad del código?

El código escrito en un estilo funcional es más conciso, por lo tanto, más claro. La biblioteca incluye y fomenta el uso de estructuras de datos inmutables, lo que mejora la calidad. La biblioteca también fomenta la composición sobre la herencia, lo que mejora la reutilización de su código.

¿Mejora la productividad?

Definitivamente. Los desarrolladores con herramientas más potentes son más productivos. En mi experiencia, los desarrolladores consideran que las funciones de primera clase hacen que la programación sea más fácil y placentera. Los programadores felices son programadores productivos.

¿Reduce los posibles puntos de error?

Un estilo de programación más funcional desalienta el estado mutable, lo que elimina una gran clase de errores. Además, las abstracciones más potentes conducen a una menor repetición, lo que reduce la cantidad de lugares donde algo anda mal.

¿Rendimiento de impacto?

No hay ninguna razón para creer que el rendimiento se vería afectado en un sentido u otro. Las estructuras de datos proporcionadas están diseñadas para facilitar el uso y la expresividad en lugar del rendimiento, pero están escritas de manera óptima por lo que son. Como con cualquier otra cosa, la forma en que maneja es más importante que lo que maneja. Por ejemplo, fj.data.List es una lista vinculada, por lo que tiene O (n) acceso aleatorio y concatenación, por lo tanto, la evita para esos fines. fj.data.Stream tiene O (1) concatenación, en comparación.

Cuestiones relacionadas