Una característica de la programación funcional es la inmutabilidad de los datos. static
implica que no necesita un objeto (instancia) que represente el estado, por lo que no es un mal comienzo. Sin embargo, tiene estado en el nivel de clase, pero puede hacer esto final
. Dado que los métodos (estáticos) no son en absoluto funciones de primera clase, aún necesitará construcciones feas como clases anónimas para aproximarse a un cierto estilo de programación funcional en Java.
FP se realiza mejor en un lenguaje funcional, ya que tiene el idioma necesario compatibilidad con para cosas como funciones de orden superior, inmutabilidad, transparencia referencial, etc.
Sin embargo, esto no significa que no pueda programar en un estilo funcional en un lenguaje imperativo como Java. También se pueden dar otros ejemplos. No es porque esté programando en Java que está haciendo OOP. Puede programar con datos globales y flujos de control no estructurados (goto
) en un lenguaje estructurado como C++. Puedo hacer OOP en un lenguaje funcional como Scheme. Etc.
Steve McConnell menciona la diferencia de la programación en un lenguaje de programación frente en un lenguaje en el código completo (también una referencia muy popular en SO).
Así que, en resumen, si dices que "los métodos estáticos imitan las funciones de primera clase", no estoy de acuerdo.
Si, sin embargo, y creo que este era más el punto que intentabas transmitir, dirías que "los métodos estáticos pueden ayudar a programar en un estilo funcional en Java", estoy de acuerdo.
Creo que está confundiendo funcional con procedural. Un error común. –
Java no tiene funciones anónimas, puede pensar en clases anónimas. De hecho, Java no tiene funciones ... solo métodos ;-) –