En general, use el lenguaje en el que sea más fácil expresar la solución a un problema. Para la programación funcional, esto es cuando la solución a un problema se expresa fácilmente en términos de funciones , de ahí el nombre. Generalmente es bueno para operaciones matemáticas, IA, coincidencia de patrones; en general, cualquier cosa que se pueda dividir en un conjunto de reglas que se deben aplicar para obtener una respuesta. Solo puede determinar realmente el "mejor" lenguaje a utilizar después de haber analizado suficientemente su problema. Aquí es donde el pseudocódigo resulta útil. Si se encuentra escribiendo un pseudocódigo que se parece a FP, utilice FP.
Por supuesto, todos los lenguajes de programación completos son funcionalmente equivalentes, por lo que realmente no importa cuál elija en términos de los problemas que pueda resolver. Los principales efectos serán en términos de eficiencia y precisión de codificación y facilidad de mantenimiento.
Tenga en cuenta también que es posible imitar FP dentro de los lenguajes OO a través de API inteligentemente diseñadas. Por ejemplo, he visto numerosas bibliotecas de Java (JMock es un ejemplo) que usan el encadenamiento de métodos para simular un FP DSL. Luego verá construcciones como:
logger.expects(once()).method("error")
.with( and(stringContains(action),stringContains(cause)) );
Básicamente, esto crea una función que se evalúa para determinar si alguna secuencia de llamada en un objeto simulado es correcta. (ejemplo robado de http://www.jmock.org/yoga.html )
Otra sintaxis similar a FP en lenguajes OO es el uso de cierres, como en Ruby.