Respuesta corta:
Uno de los elementos que hace que la gente diga que el código de programación funcional es difícil de leer es que da preferencia a una sintaxis más compacta.
Respuesta larga:
La programación funcional en sí misma no puede ser legible o ilegible, ya que es un paradigma, no un estilo de código de escritura. En C #, por ejemplo, la programación funcional se ve así:
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)));
y sería considerado legible por cualquier persona con suficiente experiencia en Java, C # o lenguajes similares.
La sintaxis del lenguaje, por otro lado, es más compacta para muchos lenguajes funcionales (incluidos Haskell y F #) en comparación con los lenguajes populares de OOP, dando preferencia a los símbolos en lugar de las palabras en inglés simple.
Esto también se aplica a los lenguajes fuera de FP. Si compara los idiomas populares de OOP con algunos menos populares que tienden a usar más palabras en inglés, los últimos se sentirían más fáciles de entender para las personas sin experiencia en programación.
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;
}
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;
}
Del mismo modo:
var a = ((b - c) in 1..n) ? d : 0;
podría expresarse en un lenguaje imaginario como:
define variable a being equal to d if (b minus c) is between 1 and n or 0 otherwise;
Cuando una sintaxis más corta es mejor?
Si bien la sintaxis más detallada es más fácil de entender para un principiante, la sintaxis más compacta es más fácil para los desarrolladores experimentados. Un código más corto significa menos caracteres para escribir, lo que significa más productividad.
Especialmente, realmente no tiene sentido obligar a una persona a escribir una palabra clave para indicar algo que puede deducirse de la sintaxis.
Ejemplos:
En PHP, debe escribir function
antes de cada función o método, sin una razón específica para hacerlo.
Ada siempre me horrorizó por obligar a los desarrolladores a escribir muchas palabras en inglés, especialmente porque no hay un IDE correcto con autocompletado. No he usado a Ada recientemente y su tutorial oficial está caído, así que no puedo dar un ejemplo; Si alguien tiene un ejemplo, siéntase libre de modificar mi respuesta.
La sintaxis 1..n
, utilizada en muchos FP (y Matlab), podría ser reemplazada por between 1, n
o between 1 and n
o between (1, n)
. La between
palabra clave hace que sea mucho más fácil de entender para las personas que no están familiarizadas con la sintaxis del idioma, pero aún así, dos puntos son mucho más rápidos de escribir.