Короткий ответ:
Один из элементов, который заставляет людей говорить, что функциональный программный код труден для чтения, заключается в том, что он отдает предпочтение более компактному синтаксису.
Длинный ответ:
Функциональное программирование само по себе не может быть читаемым или нечитаемым, поскольку это парадигма, а не стиль написания кода. Например, в C # функциональное программирование выглядит так:
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)));
и будет считаться читаемым любым человеком с достаточным опытом работы с Java, C # или подобными языками.
Синтаксис языка, с другой стороны, более компактен для многих функциональных языков (включая Haskell и F #) по сравнению с популярными языками ООП, отдавая предпочтение символам, а не слову в простом английском языке.
Это относится и к языкам вне FP. Если вы сравните популярные языки ООП с некоторыми менее популярными, которые, как правило, используют больше английских слов, то последним будет легче понять людей, не имеющих опыта программирования.
Для сравнения:
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;
}
Точно так же:
var a = ((b - c) in 1..n) ? d : 0;
можно выразить на воображаемом языке как:
define variable a being equal to d if (b minus c) is between 1 and n or 0 otherwise;
Чем короче синтаксис лучше?
В то время как более подробный синтаксис легче понять для новичка, более компактный синтаксис легче для опытных разработчиков. Более короткий код означает меньше символов для ввода, что означает большую производительность.
В частности, не имеет смысла заставлять человека вводить ключевое слово для обозначения чего-то, что может быть выведено из синтаксиса.
Примеры:
В PHP вам нужно вводить function
перед каждой функцией или методом, без особых причин делать это.
Ада всегда ужасала меня за то, что я заставлял разработчиков печатать много английских слов, тем более, что нет правильной IDE с автозаполнением. Я недавно не пользовался Ada, и их официальный учебник не работает, поэтому я не могу привести пример; если у кого-то есть пример, не стесняйтесь изменить мой ответ.
Синтаксис 1..n
, используемый во многих FP (и Matlab), может быть заменен на between 1, n
или between 1 and n
или between (1, n)
. between
Ключевое слово делает его гораздо легче понять , для людей , которые не знакомы с синтаксисом языка, но все - таки, две точки гораздо быстрее набрать.