在文章SWIFT IS A LOT LIKE SCALA [1] 提到Swift和Scala有很大的相似之处,在某些特性甚至比Scala对函数式编程的支持更友好。笔者遂从Swift语言出发,学习函数式编程[2] [3],并记录笔记如下。
什么是函式编程
是一种编程范式,强调数学化的函数,不可变(immutable),expressiveness,尽量少地使用变量、状态。
由这些特性带来的好处有:解耦,使App易于测试,易于并发、并行化。
Map Reduce Filter
Array Filter
这些函式方法和Python很像,例子:
1 | func isEven(number: Int) -> Bool { |
自制Filter
此处自定义了一个泛型函数Generic Function。
1 | func myFilter<T>(source: [T], predicate:(T) -> Bool) -> [T] { |
Array Reduce
任务:取1…10的偶数求和
1 | let evenSum = Array(1...10) |
或者简写
1 | let evenSum = Array(1...10) |
自定义Reduce
1 | extension Array { |
递归Reduce
需先声明Closure类型,再定义行为。参考Advanced Swift at WWDC14 [4] 的视频。
1 | let list: ArraySlice = [1,2,3,4,5,6,7,8,9,10] |
函数式编程练习:建立字典索引
输入如:
1 | let words = ["Guinea Pig", "Mouse", "Monkey", |
求输出:
1 | let dict = [(C, [Cat, Chicken]), |
思路1:
1 | extension String { |
思路2:(参见[2] )
1 | func buildIndexOf(words: WordList) -> Entries { |