Resposta curta:
Um dos elementos que faz as pessoas dizerem que o código de programação funcional é difícil de ler é que ele dá preferência a uma sintaxe mais compacta.
Resposta longa:
A programação funcional em si não pode ser legível ou ilegível, pois é um paradigma, não um estilo de escrever código. Em C #, por exemplo, a programação funcional se parece com:
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 seria considerado legível por qualquer pessoa com experiência suficiente em Java, C # ou linguagens semelhantes.
A sintaxe do idioma, por outro lado, é mais compacta para muitos idiomas funcionais (incluindo Haskell e F #) em comparação aos idiomas populares de POO, dando preferência a símbolos em vez de palavras em inglês comum.
Isso se aplica a idiomas fora do FP também. Se você comparar idiomas populares de POO com outros menos populares que tendem a usar mais palavras em inglês, os últimos pareceriam mais fáceis de entender para pessoas sem experiência em programação.
Comparar:
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;
}
para:
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;
}
Do mesmo jeito:
var a = ((b - c) in 1..n) ? d : 0;
pode ser expresso em uma linguagem imaginária como:
define variable a being equal to d if (b minus c) is between 1 and n or 0 otherwise;
Quando uma sintaxe mais curta é melhor?
Embora uma sintaxe mais detalhada seja mais fácil de entender para um iniciante, uma sintaxe mais compacta é mais fácil para desenvolvedores experientes. Código mais curto significa menos caracteres para digitar, o que significa mais produtividade.
Especialmente, não faz sentido forçar uma pessoa a digitar uma palavra-chave para indicar algo que pode ser deduzido da sintaxe.
Exemplos:
No PHP, você precisa digitar function
antes de cada função ou método, sem motivo específico para fazê-lo.
Ada sempre me horrorizou por forçar os desenvolvedores a digitar muitas palavras em inglês, especialmente porque não há um IDE correto com preenchimento automático. Eu não usei Ada recentemente e o tutorial oficial está fora do ar, então não posso dar um exemplo; se alguém tiver um exemplo, fique à vontade para modificar minha resposta.
A sintaxe 1..n
, usada em muitos FP (e Matlab), pode ser substituída por between 1, n
ou between 1 and n
ou between (1, n)
. A between
palavra-chave facilita a compreensão de pessoas que não estão familiarizadas com a sintaxe do idioma, mas ainda assim, dois pontos são muito mais rápidos para digitar.