Hi,SwiftGG 翻译组启用了新的域名:swiftgg.team今后翻译组的各项活动将会在新域名下开展,不要错过哦!

作者:Natasha,原文链接,原文日期:2015-11-13
译者:小袋子;校对:numbbbbb;定稿:numbbbbb

Swift 一个强有力的语言特性就是能够用多样的函数式风格去编写代码。这在社区看来非常激动人心。

我在去年年底花费了一些时间学习函数式编程,所以我可以写更好的 Swift 代码。因此,我非常推荐你们也花时间去学习一下!

另外,我非常推荐推荐你们去看 Functional Swift conference上的每一个视频。

所以在花了这么多时间后,我想要总结一下个人有关于函数式编程在 Swift 应用的一些思考。

跟着概念走

函数式编程是令人生畏的,这要归咎于单子(monads)和 函数子(functors)!然而,一旦你领悟了它的核心概念,那么函数式编程的思想会超级简单:

“函数式编程是一个编程范例…它把计算作为数学函数的评估,并避免改变状态和可变数据。”— 维基百科

所以核心就是你应该用数学的方式去编写代码。你的函数应该有清晰的输入和输出,并且不会像可变对象一样有全局副作用。这就是了!

避免可变状态

这和上述的注意点类似。函数式编程要编写的是没有副作用的数学代码。

在 Swift 中使用结构体和协议帮助你避免可变状态。

我极度推荐观看 @andy_matuschakControlling Complexity in Swift,这可以让你理解如何去实现以及最终的代码会如何地强大。

可读性第一

我发现很多高级的函数式代码,通常由于五个以上的习惯性编程而变得特别难以阅读。如果你遵从函数式编程的概念,有很多方法让你的代码变得更清楚。

但是在今天结束之前,还要多说一句,如果你在一个团队中工作,最重要的事就是让代码可读性更强。如果一个内部或者一个新的开发者加入你们的团队,他们会不会完全迷失了?如果你专注于编写易读的代码(取代好玩和花哨的写法),他们可能会很快就有产出。

记住一点,可读性的优先级永远比花哨的代码高(除非你的目标就是用一个好玩的副作用去实现好玩和花哨的程序)。

不要和 framework 作对

当然,在 iOS 编程中,由于 Cocoa framework 的建立和用户的输入输出,没有副作用显然是不可能的(在纯粹的数学世界,确实存在完全没有外部副作用,但那不是我们生活的世界!)。

例如,如果你创建了一个通用的转换器(formatter)(例如货币转换器),并用在代码中的一些地方,用单例是一个很好的方法。你还必须为UI Layer 使用 UIViewControllers 以及 UIViews。总有办法去脱离你的逻辑,进而让很好的不可变组件去帮助你可变化这些东西,但是不要过火地把 freamwork 改变为面目全非(可读,不可读)的状态。

深入学习函数式编程

再次强调,你不应该执着于在你的 Swift 代码中使用花哨的技巧(除非你只是为了试验、或者好玩)。我非常推荐深入学习函数式编程的思想,从而理解那些高级概念,并且更好地应用在你的代码中。

推荐阅读 Functional Programming in Swift !这里有更多的资源去帮助你开始学习!

本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg

文章目录
  1. 1. 跟着概念走
  2. 2. 避免可变状态
  3. 3. 可读性第一
  4. 4. 不要和 framework 作对
  5. 5. 深入学习函数式编程