柯里化及相关延伸思考
怎么理解
看这篇文章的 1.6.6 Currying 这一节。
前提:编程语言得支持这个玩法
需要编程语言把函数当作 first-class,一等成员,即允许函数被:用参数传递给函数、被函数返回、被赋值给变量。这种函数内定义的函数,可以捕获它们被定义时(注意不是被调用时,记住这点就能弄明白)环境的变量定义,而且还能在被返回时保留这些定义(闭包)。于是我们可以用工厂模式一样的高级函数,输入一些配置参数,返回的是一个配置好的函数,然后我们再用这个参数去实际地用。
看这篇文章的 1.6.6 Currying 这一节。
需要编程语言把函数当作 first-class,一等成员,即允许函数被:用参数传递给函数、被函数返回、被赋值给变量。这种函数内定义的函数,可以捕获它们被定义时(注意不是被调用时,记住这点就能弄明白)环境的变量定义,而且还能在被返回时保留这些定义(闭包)。于是我们可以用工厂模式一样的高级函数,输入一些配置参数,返回的是一个配置好的函数,然后我们再用这个参数去实际地用。
首先提醒一下记得单一职责原则(SRP)是面向对象实践下的设计原则,也是SOLID五大面向对象设计原则之一。然后不要重复自己(DRY)原则则是更泛化的编程原则,也可以用在编程工作以外。这个短文讲两个原则的关系,总归还是把前提限定在了面向对象编程之内。
我记得这是哪本书上的例子,大概是Clean Code,它是用这个例子来解释 SRP 的含义的,我稍微改一下,不翻原书了:
需求 1:有三种员工,经理和普通员工和临时工,计算他们薪资的算法是相同的。
需求 1 映射到代码里就是,三个分开的员工类,然后三个类计算薪资的方法内部会调用同一个工具函数,DRY,对吧。
我不是装机发烧友,过程中也请教了不少朋友和互联网,但现在想想其实不是很麻烦,主要是没有整体的知识框架,是无知导致的畏手畏脚。所以把最近第一次组装台式主机的经历和总结记下来,如果能帮到其他人就更好了。
就算知道配件的知识,什么接口什么协议,那些都是抽象的行业标准,对选配件没太大帮助。比如你知道牛奶的国标,但还是在货架旁纠结买哪个品牌的牛奶。和买牛奶一样,选电脑配件就是选品牌,需要对品牌甚至品牌下的产品线有一个整体的了解,不是发烧友一般不会主动去获取这方面的知识。下面我会多次提到某个配件“竞争品牌多,勤搜索论坛和评测,注意别翻车”这类话,就是指,首先搜着看一些广谱的推荐文章,选定一些品牌型号,然后挨个在网上搜这个型号的评价。
本文旨在配合图示帮助读者理解单元测试中的“Mock”这个技巧概念,希望下次开发时大家可以用到这个技巧。
简单说一下单元测试的概念:
except和actual两个变量名。调用方法会产生两种行为,两种行为可同时发生,但至少发生一种,要不它就失去了作为方法的方生意义:
本文试图通过介绍编程工作中的部分技能和知识,帮助新进入程序员职业的朋友熟悉未来的工作。特别的,本文将额外提供以 Java 编程语言下的 Spring 框架开发 Web 应用后端逻辑的工作相关的介绍。
因本文实在冗长,建议你结合目录挑选自己感兴趣的部分阅读。如果你想通过文本做跳板寻找优质学习资源,希望附录部分我精心挑选的网站和书籍推荐让你满意。