Réponse courte:
Un des éléments qui font dire que le code de programmation fonctionnel est difficile à lire est qu'il donne la préférence à une syntaxe plus compacte.
Longue réponse:
La programmation fonctionnelle elle-même ne peut pas être lisible ou illisible, car c'est un paradigme, pas un style d'écriture de code. En C # par exemple, la programmation fonctionnelle ressemble à:
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)));
et serait considéré comme lisible par toute personne ayant suffisamment d'expérience en Java, C # ou langages similaires.
La syntaxe du langage, d'autre part, est plus compacte pour de nombreux langages fonctionnels (y compris Haskell et F #) par rapport aux langages OOP populaires, donnant une préférence aux symboles plutôt qu'aux mots en anglais simple.
Cela s'applique également aux langues en dehors de la PF. Si vous comparez les langages OOP populaires à d'autres moins populaires qui ont tendance à utiliser plus de mots anglais, les derniers se sentiraient plus faciles à comprendre pour les personnes sans expérience en programmation.
Comparer:
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;
}
à:
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;
}
De la même manière:
var a = ((b - c) in 1..n) ? d : 0;
pourrait s'exprimer dans un langage imaginaire comme:
define variable a being equal to d if (b minus c) is between 1 and n or 0 otherwise;
Quand une syntaxe plus courte est meilleure?
Alors qu'une syntaxe plus verbeuse est plus facile à comprendre pour un débutant, une syntaxe plus compacte est plus facile pour les développeurs expérimentés. Un code plus court signifie moins de caractères à taper, ce qui signifie plus de productivité.
Surtout, cela n'a vraiment aucun sens d'obliger une personne à taper un mot-clé pour indiquer quelque chose qui peut être déduit de la syntaxe.
Exemples:
En PHP, vous devez taper function
avant chaque fonction ou méthode, sans raison particulière de le faire.
Ada m'a toujours horrifié d'avoir forcé les développeurs à taper beaucoup de mots anglais, d'autant plus qu'il n'y a pas d'IDE correct avec auto-complétion. Je n'ai pas utilisé Ada récemment et leur tutoriel officiel est en panne donc je ne peux pas donner d'exemple; si quelqu'un a un exemple, n'hésitez pas à modifier ma réponse.
La syntaxe 1..n
, utilisée dans de nombreux FP (et Matlab), pourrait être remplacée par between 1, n
ou between 1 and n
ou between (1, n)
. Le between
mot-clé le rend beaucoup plus facile à comprendre pour les personnes qui ne connaissent pas la syntaxe du langage, mais néanmoins, deux points sont beaucoup plus rapides à taper.