这本书尝试让你学会以函数式的方式进行思考。我们认为 Swift 有着合适的语言特性来适配函 数式的编程方法。然而是什么使得程序具有函数式特性?又为何要一开始就学习关于函数式的 内容呢?
很难给出函数式的准确定义 — 其实同样地,我们也很难给出面向对象编程,亦或是其它编程范 式的准确定义。因此,我们会尽量把重点放在我们认为设计良好的 Swift 函数式程序应该具有 的一些特质上:
→ 模块化:相较于把程序认为是一系列赋值和方法调用,函数式开发者更倾向于强调每个 程序都能够被反复分解为越来越小的模块单元,而所有这些块可以通过函数装配起来, 以定义一个完整的程序。当然,只有当我们能够避免在两个独立组件之间共享状态时, 才能将一个大型程序分解为更小的单元。这引出我们的下一个关注特质。
→ 对可变状态的谨慎处理:函数式编程有时候(被半开玩笑地)称为“面向值编程”。面向 对象编程专注于类和对象的设计,每个类和对象都有它们自己的封装状态。然而,函数 式编程强调基于值编程的重要性,这能使我们免受可变状态或其他一些副作用的困扰。 通过避免可变状态,函数式程序比其对应的命令式或者面向对象的程序更容易组合。
→ 类型:最后,一个设计良好的函数式程序在使用类型时应该相当谨慎。精心选择你的数 据和函数的类型,将会有助于构建你的代码,这比其他东西都重要。Swift 有一个强大 的类型系统,使用得当的话,它能够让你的代码更加安全和健壮。
我们认为这些特质是 Swift 程序员可能从函数式编程社区学习到的精华点。在这本书中,我们 将通过许多实例和学习案例说明以上几点。
根据我们的经验,学习用函数式的方式思考并不容易。它挑战了我们既有的熟练解决问题的方 式。对于习惯写 for 循环的程序员来说,递归可能让我们倍感迷惑;赋值语句和全局状态的缺 失让我们寸步难行;更不用提闭包,泛型,高阶函数和单子 (Monad),这些东西简直让人痛不 欲生。
在这本书中,我们假定你以前有过 Objective-C (或其他一些面向对象的语言) 的编程经验。书 中不会涵盖 Swift 的基础知识,或是教你创建你的第一个 Xcode 工程,但我们会尝试在适当的 时候引用现有的 Apple 文档。你应当能自如地阅读 Swift 程序,并且熟悉常⻅的编程概念,如 类,方法和变量等。如果你刚刚开始学习编程,这本书可能并不适合你。
在这本书中,我们希望让函数式编程易于理解,并消除人们对它的一些偏⻅。使用这些理念去 改善你的代码并不需要你拥有数学的博士学位!函数式编程并不是 Swift 编程的唯一方式。但
是我们相信学习函数式编程会为你的工具箱添加一件重要的新工具,不论你使用那种语言,这
件工具都会让你成为一个更好的开发者。
百度网盘
链接:https://pan.baidu.com/s/1eprygKS0rE4-uzXEDFNezw 密码:aypi
网友评论