类是编写高阶函数的一种方式

2020-09-10 03:07:01

乔和我最近开始了对SiCp的重读。我可以说这是我看过的最有趣的教科书。想象一下,您开始时只有4或5个结构,最终构建代数方程解算器、电路仿真器,甚至逻辑编程语言。因为您开始时只有很少的构造,所以额外的好处是您开始看到编程中从根本上简单、共享的本质。

我想在书中给你们举一个让我吃惊的例子。我们倾向于认为类属于与函数完全不同的类别。

类Person{structor(FirstName,LastName){this.fName=FirstName;this.lName=FirstName;}getFullName(){return this.fName+';';+this.lName;}setFirstName(FirstName){this.fName=FirstName;}}。

如果我们仔细想想,这只是一个更高阶的函数。Person高阶函数接受参数(构造函数),并返回可以操作这些参数的函数列表(方法)。我们可以这样写“人物”:

函数Person(FirstName,LastName){let fName=FirstName;let lName=lastName;function getFullName(){return fName+';';+lName;}function setFirstName(FirstName){fName=FirstName}return function(Method){switch(Method){case';getFullName';return getFullName;case';setFirstName';return setFirstName';setFirstName';

在这里,我们不是调用方法,而是“传递”一条消息。顺便说一句,这就是为什么许多经典的面向对象人士谈论面向对象实际上是关于消息传递。

是啊,真的。类只是更高阶的函数,它们接受参数(构造函数)并返回可以操作这些参数的函数列表(方法)。

当您以前认为两个概念不同,但事实证明它们是相同的时,您发现新想法的时机已经成熟:您可以找到它们之间更深层次的抽象,将这些看似不同的类别中的想法应用到不同的类别中,并更流畅地在概念之间移动。因此,不仅像这样的顿悟很有趣,而且它们比你想象的要有用得多。

如果你喜欢这个,教科书上有一大堆类似的顿悟。为了更好地体验它,我建议选择一个合作伙伴,然后一起读完这本书。