En général, utilisez la langue dans laquelle il est le plus facile d'exprimer la solution à un problème. Pour la programmation fonctionnelle, c'est à ce moment que la solution à un problème s'exprime facilement en termes de fonctions , d'où le nom. En général, c'est bon pour les opérations mathématiques, l'IA, la correspondance de modèles; en général tout ce qui peut être décomposé en un ensemble de règles qui doivent être appliquées pour obtenir une réponse. Vous ne pouvez vraiment déterminer le "meilleur" langage à utiliser qu'après avoir suffisamment analysé votre problème. C'est là que le pseudo-code est utile. Si vous vous retrouvez à écrire un pseudo-code qui ressemble à FP, utilisez FP.
Bien sûr, tous les langages de programmation complets sont fonctionnellement équivalents, donc peu importe celui que vous choisissez en termes de problèmes que vous pouvez résoudre. Les principaux effets seront en termes d'efficacité et de précision du codage et de facilité d'entretien.
Notez également qu'il est possible d'imiter FP dans les langages OO grâce à des API intelligemment conçues. Par exemple, j'ai vu de nombreuses bibliothèques Java (JMock en est un exemple) qui utilisent le chaînage de méthodes pour simuler un FP DSL. Ensuite, vous verrez des constructions telles que:
logger.expects(once()).method("error")
.with( and(stringContains(action),stringContains(cause)) );
Cela crée essentiellement une fonction qui est évaluée pour déterminer si une séquence d'appel sur un objet fictif est correcte. (exemple volé sur http://www.jmock.org/yoga.html )
Une autre syntaxe de type FP dans les langages OO est l'utilisation de fermetures, comme dans Ruby.