Risposta breve:
Uno degli elementi che inducono le persone a dire 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. In C # per esempio, la programmazione funzionale è simile a:
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 linguaggi simili.
La sintassi della lingua, d'altra parte, è più compatta per molti linguaggi funzionali (inclusi Haskell e F #) rispetto alle lingue OOP popolari, dando una preferenza ai simboli piuttosto che alla parola in inglese semplice.
Questo vale anche per le lingue al di fuori di FP. Se confronti le lingue OOP popolari con alcune meno popolari che tendono a usare più parole inglesi, le ultime sembrerebbero più facili da capire per le persone senza esperienza di programmazione.
Confrontare:
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;
}
per:
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;
}
Nello 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ù corta è migliore?
Mentre una sintassi più dettagliata è più facile da capire per un principiante, una sintassi più compatta è più facile per gli sviluppatori esperti. Codice più breve significa meno caratteri da digitare, il che significa maggiore produttività.
In particolare, non ha davvero 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 un motivo specifico per farlo.
Ada mi ha sempre spaventato per aver costretto gli sviluppatori a digitare molte parole inglesi, soprattutto perché non esiste un IDE corretto con il completamento automatico. Non ho usato Ada di recente e il loro tutorial ufficiale è inattivo, quindi non posso fare 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 between
parola chiave rende molto più facile la comprensione per le persone che non hanno familiarità con la sintassi della lingua, ma tuttavia, due punti sono molto più veloci da digitare.