In generale, usa la lingua in cui è più facile esprimere la soluzione a un problema. Per la programmazione funzionale, questo è quando la soluzione a un problema è facilmente espressa in termini di funzioni , da cui il nome. Generalmente va bene per operazioni matematiche, AI, pattern matching; in generale tutto ciò che può essere scomposto in un insieme di regole che devono essere applicate per ottenere una risposta. Puoi determinare la lingua "migliore" da usare solo dopo aver analizzato a sufficienza il tuo problema. È qui che lo pseudo-codice torna utile. Se ti ritrovi a scrivere pseudo-codice che assomiglia a FP, usa FP.
Naturalmente, tutti i linguaggi di programmazione completi sono funzionalmente equivalenti, quindi non importa quale si scelga in termini di problemi che si possono risolvere. Gli effetti principali saranno in termini di efficienza e precisione della codifica e facilità di manutenzione.
Nota anche che è possibile imitare FP nei linguaggi OO attraverso API progettate in modo intelligente. Ad esempio, ho visto numerose librerie Java (JMock è un esempio) che utilizzano il concatenamento di metodi per simulare un FP DSL. Quindi vedrai costrutti come:
logger.expects(once()).method("error")
.with( and(stringContains(action),stringContains(cause)) );
Questo essenzialmente costruisce una funzione che viene valutata per determinare se una sequenza di chiamata su un oggetto fittizio è corretta. (esempio rubato da http://www.jmock.org/yoga.html )
Un'altra sintassi simile a FP in linguaggi altrimenti OO è l'uso di chiusure, come in Ruby.