*来自游戏天际的模因短语
如果您仍然不使用箭头功能,那就不要怪自己-那是您父母的工作;相反,请考虑将其作为勤奋的学生所能获得的好处。今天,我所有的代码都是使用箭头功能编写的。
这是相同代码的示例,也以传统风格编写:
const arrowFunction = (arg1, arg2) => arg1 + arg 2;
const traditionalFunction = function(arg1, arg2) {
return arg1 + arg2;
};
您可能会注意到,使用箭头功能编写的代码短得多。箭头之前写的所有内容都是自变量,箭头之后是返回的结果。
如果您需要一个包含多个动作的函数,则可以这样编写:
const arrowFunction = (arg1, arg2) => {
const result = arg1 + arg2;
return result;
};
箭头函数通常也称为lambda函数,它们不仅在JavaScript中使用。Python是可以在其中找到lambda函数的一个很好的示例。
在Python中,其语法如下:
lambdaFunction = lambda a, b : a + b
简化
使用箭头功能可以激励您根据KISS原则(Keep-it-simple-stupid)和单一职责原则(每个功能仅负责一个特定的动作)简化代码。
通常,我写的时候没有大括号{}。如果函数难以阅读,或者您需要在其中使用多个表达式,建议您将其分解为几个较小的表达式。
此代码更易于编写,更易于重用和测试。另外,可以为函数指定更多描述性名称,以准确表示它们正在执行的工作。
一流的功能
JavaScript具有一流的功能。这些功能与常规变量一样使用。它们可以充当其他函数的参数,或者作为结果返回它们。您最可能熟悉的示例:
document.querySelector('#myButton').addEventListner('click', function() {
alert('click happened');
});
此处显示的是作为参数传递给addEventListener的匿名函数。此方法通常在Javascript中用于回调。
返回函数的示例有所不同-如下所示:
const myFirstClassFunction = function(a) {
return function(b) {
return a + b;
};
};
myFirstClassFunction(1)(2); // => 3
但是,使用箭头功能,所有内容看起来都更加清晰:
const myFirstClassArrow = a => b => a + b;
myFirstClassArrow(1)(2); // => 3
这里的一切都很简单:最后一个箭头之前写的是参数,之后是计算。实际上,我们正在使用多个函数,并且还可以使用多个调用fn(call1)(call2);
部分申请
您可以开始使用箭头功能来构成部分适用的功能(例如乐高积木)。这将允许您通过将自定义函数传递给自定义函数来创建自定义函数。让我们在下面的示例中对其进行分解:
const add = a => b => a + b;
const increaseCounter = counter => add(1)(counter);
increaseCounter(5); // => 6
const pointFreeIncreaseCounter = add(1);
pointFreeIncreaseCounter(5); // => 6
这类似于将函数与默认变量一起使用,但是部分应用程序提供了更大的灵活性。
这些功能称为curried。它们是函数编程中常见的一元函数和monad序列。
功能编程
您可能已经猜到了,箭头功能的主要原因是函数式编程。它是基于简单函数组成的声明式样式范例。
函数式编程是许多开发人员(包括本文的作者)首选的OOP的替代方法。您可以主张任何风格,但是我认为函数式编程很酷,以为曾经的想法不同,您会感到不舒服。
纯函数仅依赖输入,并且始终返回某些值。它们从不更改(变异)其他变量,并且不依赖于输入值之外的外部数据。这导致引用透明,这使编程更容易。
是的,始终可以编写大量代码而无需更改单个变量。
如您所见,箭头功能旨在在输入和输出之间转换数据。他们甚至不需要返回没有花括号的简写形式。
箭头功能-结论
箭头函数使您的语法更短,从而减少了编写,读取和测试代码的时间,并简化了代码。考虑一下,因为您很可能是一名高级开发人员,并且使用这些技巧将使您更加高级并增加相关性。函数式编程真的很棒。它使您成为一名艺术家,可以用代码来完成优雅的简短功能。
实际功能示例
要了解兔子洞中隐藏的内容,我们来看一个使用开源库@ 7urtle / lambda的示例
import {trim, upperCaseOf, lengthOf, lastLetterOf, includes, compose} from '@7urtle/lambda';
const endsWithPunctuation = input =>
includes(lastLetterOf(input))('.?,!');
const replacePunctuationWithExclamation = input =>
substr(lengthOf(input) - 1)(0)(input) + '!';
const addExclamationMark = input =>
endsWithPunctuation(input)
? replacePunctuationWithExclamation(input)
: input + '!';
const shout = compose(addExclamationMark, upperCaseOf, trim);
shout(" Don't forget to feed the turtle.");
// => !
使用箭头功能和学习功能编程非常容易上瘾。这使您可以编写较短的代码,并具有更好的性能和可重用性。
JavaScript在使用类似C的语法和功能编程功能之间的不一致方面可能会很棘手。为了帮助人们更好地理解并提供学习材料的访问权限,我开发了@ 7urtle / lambda库。您可以按照自己的节奏掌握函数式编程,而www.7urtle.com将通过为您提供所需的所有工具来帮助您学习此范例。