Risposta breve:
Uno degli elementi che fanno affermare che il codice di programmazione funzionale è difficile da leggere è che dà la preferenza a una sintassi più compatta.
Risposta lunga:
La stessa programmazione funzionale non può essere leggibile o illeggibile, poiché è un paradigma, non uno stile di scrittura del codice. Ad esempio, in C #, la programmazione funzionale ha il seguente aspetto:
return this.Data.Products
.Where(c => c.IsEnabled)
.GroupBy(c => c.Category)
.Select(c => new PricesPerCategory(category: c.Key, minimum: c.Min(d => d.Price), maximum: c.Max(d => d.Price)));
e sarebbe considerato leggibile da qualsiasi persona con sufficiente esperienza in Java, C # o lingue simili.
La sintassi della lingua, d'altra parte, è più compatta per molti linguaggi funzionali (inclusi Haskell e F #) rispetto ai popolari linguaggi OOP, dando una preferenza ai simboli piuttosto che alla parola in inglese semplice.
Questo vale anche per le lingue esterne a FP. Se si confrontano i linguaggi OOP più diffusi con quelli meno popolari che tendono ad usare più parole inglesi, gli ultimi sarebbero più facili da capire per le persone senza esperienza di programmazione.
Confronto:
public void IsWithinRanges<T>(T number, param Range<T>[] ranges) where T : INumeric
{
foreach (var range in ranges)
{
if (number >= range.Left && number <= range.Right)
{
return true;
}
}
return false;
}
a:
public function void IsWithinRanges
with parameters T number, param array of (Range of T) ranges
using generic type T
given that T implements INumeric
{
for each (var range in ranges)
{
if (number is from range.Left to range.Right)
{
return true;
}
}
return false;
}
Allo stesso modo:
var a = ((b - c) in 1..n) ? d : 0;
potrebbe essere espresso in un linguaggio immaginario come:
define variable a being equal to d if (b minus c) is between 1 and n or 0 otherwise;
Quando la sintassi più breve è migliore?
Mentre una sintassi più dettagliata è più facile da capire per un principiante, la sintassi più compatta è più semplice per gli sviluppatori esperti. Codice più corto significa meno caratteri da digitare, il che significa più produttività.
Soprattutto, non ha senso forzare una persona a digitare una parola chiave per indicare qualcosa che può essere dedotto dalla sintassi.
Esempi:
-
In PHP devi digitare function
prima di ogni funzione o metodo, senza alcun motivo specifico per farlo.
-
Ada mi ha sempre inorridito per aver costretto gli sviluppatori a digitare molte parole inglesi, soprattutto perché non esiste un IDE corretto con completamento automatico. Non ho usato Ada di recente e il loro tutorial ufficiale non funziona, quindi non posso dare un esempio; se qualcuno ha un esempio, sentiti libero di modificare la mia risposta.
-
La sintassi 1..n
, utilizzata in molti FP (e Matlab), potrebbe essere sostituita da between 1, n
o between 1 and n
o between (1, n)
. La parola chiave between
rende molto più facile la comprensione per le persone che non hanno familiarità con la sintassi del linguaggio, ma comunque, due punti sono molto più veloci da scrivere.