Swift的强大之处
在写任何东西之前我需要承认我是带有偏见的:我爱 Swift。我认为这是从我开始接触 Cocoa 生态系统以来这个平台上发生的最好的事情。我想通过分享我在 Swift,Objective-C 和 Haskell 上的经验让大家知道我为何这样认为。写这篇文章并不是为了介绍一些最好的实践 (写这些的时候 Swift 还太年轻,还没最好实践被总结出来),而是举几个关于 Swift 强大之处的例子。
给大家一些我的个人背景:在成为全职 iOS/Mac 工程师之前我花了几年的时间做 Haskell (包括一些其他函数式编程语言) 开发。我仍然认为 Haskell 是我所有使用过的语言中最棒的之一。然而我转战到了 Objective-C,是因为我相信 iOS 是最令人激动的平台。刚开始接触 Objective-C 的时候我有些许沮丧,但我慢慢地学会了欣赏它。
当苹果在 WWDC 发布 Swift 的时候我非常的激动。我已经很久没有对新技术的发布感的如此兴奋了。在看过文档之后我意识到 Swift 使我们能够将现有的函数式编程知识和 Cocoa API 无缝地整合到一起。我觉得这两者的组合非常独特:没有任何其他的语言将它们融合地如此完美。就拿 Haskell 来说,想要用它来使用 Objective-C API 相当的困难。同样,想用 Objective-C 去做函数式编程也是十分困难的。
在 Utrecht 大学期间我学会了函数式编程。因为是在很学术的环境下学习所以并没有觉得很多复杂的术语 (moands,applicative functors 以及很多其他的东西) 有多么难懂。我觉得对很多想学习函数式编程的人来说这些名称是一个很大的阻碍。
不仅仅名称很不同,风格也不一样。作为 Objective-C 程序员,我们很习惯于面向对象编程。而且因为大多数语言不是面对对象编程就是与之类似,我们可以看懂很多不同语言的代码。阅读函数式编程语言的时候则大不相同 – 如果你没有习惯的话看起来简直莫名其妙。
那么,为什么你要使用函数式编程呢?它很奇怪,很多人都不习惯而且学习它要花费大量的时间。并且对于大多数问题面向对象编程都能解决,所以没有必要去学习任何新的东西对吧?
对于我来说,函数式编程只是工具箱中的一件工具。它是一个改变了我对编程的理解的强大工具。在解决问题的时候它非常强大。对于大多数问题面向对象编程都很棒,但是对于其他一些问题应用函数式编程会给你带来巨大的时间/精力的节省。
开始学习函数式编程或许有些痛苦。第一,你必须放手一些老的模式。而因为我们很多人常年用面对对象的方式去思考,做到这一点是很困难的。在函数式编程当中你想的是不变的数据结构以及那些转换它们的函数。在面对对象编程当中你考虑的是互相发送信息的对象。如果你没有马上理解函数式编程,这是一个好的信号。你的大脑很可能已经完全适应了用面对对象的方法来解决问题。