简短答案:
人们说功能性编程代码难以阅读的要素之一是,它偏爱更紧凑的语法。
长答案:
函数式程序设计本身不是可读或不可读的,因为它是一种范式,而不是一种代码编写方式。例如,在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#或类似语言的经验的人视为可读。
另一方面,与流行的OOP语言相比,对于许多功能语言(包括Haskell和F#)而言,语言语法更加紧凑,从而优先使用符号而不是普通英语单词。
这也适用于FP以外的语言。如果将流行的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
在每个函数或方法之前进行键入,而无需特殊原因。
Ada总是因为强迫开发人员键入很多英文单词而感到震惊,特别是因为没有正确的IDE自动完成功能。我最近没有使用过Ada,而且他们的官方教程已停刊,因此我无法举例。如果有人有例子,请随时修改我的答案。
1..n
许多FP(和Matlab)中使用的语法可以用between 1, n
或between 1 and n
或代替between (1, n)
。该between
关键字使得它更容易理解的人谁不熟悉语言的语法,不过,两个点的速度会更快打字。