业务需求
- 假设我们有一个名字列表,其中一些条目由单个字符构成。现在的任务是,将除去单字符条目之外的列表内容,放在一个逗号分隔的字符串里返回,且每个名字的首字母都要大写。
命令式解法
- 命令式编程是按照“程序是一系列改变状态的命令”来建模的一种编程风格。传统的 for 循环是命令式风格的绝好的例子:先确立初始状态,然后每次迭代都执行循环体中的一系列命令。
![](https://img.haomeiwen.com/i2160432/2746d82f66ba391f.png)
函数式解法
- 函数式编程将程序描述为表达式和变换,以数学方程的形式建立模型,并且尽量避免可变的状态。函数式编程语言对问题的归类不同于命令式语言。如前面所用到的几种操作【filter、transform、convert】,每一种都作为一个逻辑分类由不同的函数所代表,这些函数实现了低层次的变换,但依赖于开发者定义的高阶函数作为参数来调整其低层次运转机构的运作。
![](https://img.haomeiwen.com/i2160432/3d3b09082ca1eeb2.png)
Swift 的劣势 -- 并行
![](https://img.haomeiwen.com/i2160432/4daceef0b3ee05d3.png)
Swift中没有上图的操作
改进之后:
![](https://img.haomeiwen.com/i2160432/f1ba2befc567d76d.png)
对 Swift 的尝试改进
并行的map,最终结果和原始数据顺序不同了
【此处并行是非线程安全的】
![](https://img.haomeiwen.com/i2160432/472416925a1b57e9.png)
具有普遍意义的基本构造单元
- 筛选(filter)
- 映射 (map)
- 折叠/化约 (fold Left/reduce 等)
网友评论