Коротка відповідь:
Один з елементів, який змушує людей говорити, що функціональний код програмування важко читати, - це те, що він надає перевагу більш компактному синтаксису.
Довга відповідь:
Саме функціональне програмування не може бути читабельним чи нечитабельним, оскільки це парадигма, а не стиль написання коду. Наприклад, у 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 #) порівняно з популярними мовами OOP, надаючи перевагу символам, а не слові в звичайній англійській мові.
Це стосується і мов поза межами ПП. Якщо порівнювати популярні мови OOP з деякими менш популярними, які, як правило, використовують більше англійських слів, останнім було б легше зрозуміти людям, які не мають досвіду програмування.
Порівняйте:
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 з автоматичним заповненням. Я недавно не використовував Ада, і їх офіційний підручник знищений, тому я не можу навести приклад; якщо хтось має приклад, не соромтеся змінити мою відповідь.
Синтаксис 1..n
, який використовується в багатьох FP (і Matlab), може бути замінений between 1, n
або between 1 and n
або between (1, n)
. between
Ключове слово робить його набагато легше зрозуміти , для людей , які не знайомі з синтаксисом мови, але все - таки, дві точки набагато швидше набрати.