Trovo migliori i linguaggi funzionali perché tendono a richiedere pochissime cerimonie per la funzionalità che forniscono. Ad esempio .... prendiamo ogni numero in una lista di numeri interi aggiungendone uno al numero e poi sommandoli.
In Clojure:
(reduce + (map inc mylist))
In C # (stile funzionale):
result = mylist.Select(i => i + 1).Sum();
In C # (stile imperativo):
int sum = 0;
foreach (int i in mylist)
{
sum += (i + 1);
}
Diamo un'occhiata allo stile imperativo ... dobbiamo creare un accumulatore (somma), una variabile locale (i), e dobbiamo anche essere espliciti nel modo in cui enumeriamo il nostro ciclo. Ciò che prende una singola riga di codice, ed è estremamente leggibile in un linguaggio funzionale, si è gonfiato in 5 righe di C # e non è quasi leggibile.
Quindi, dopo aver studiato sia le lingue imperative che quelle funzionali per diversi anni, sono semplicemente arrivato alla conclusione che avrei preferito usare meno lavoro per ottenere di più. Dal passaggio a Clojure per tutti i miei progetti di hobby ho scoperto che posso improvvisamente ottenere molto di più con meno codice.
Quindi tornando alla tua domanda, non mi trovo mai a chiedere "perché dovrei usare un linguaggio funzionale?", ma invece, "perché non dovrei usare un linguaggio funzionale?". A volte è necessario pensare al problema in un modo diverso, ma trovo che il mio codice funzionale sia più conciso, elegante e leggibile del codice che sono costretto a scrivere in C #.
Per il contesto, codice in C # 8+ ore al giorno al lavoro e codice circa 1-2 ore in Clojure ogni notte.