从OOP和FP看苹果Swift语言与Scala比较
如果说,此前的Scala语言是一种函数式编程语言,那么苹果推出的Swift语言无疑是针对Scala提出的挑战。
从语言特性比较上看,Swift语言是将函数作为第一等公民,同时支持类型和数据结构,当Java初学者还在疑惑对象是按值传递还是按引用传递时,Swift干脆显式的区分这两点,类型Class是按引用传递,而数据结构是按值传递,这种清晰的分离反而使得OOP和FP两种都变得更加轻松。见我之前的帖子:伪命题:Java传递的值还是引用?
当我们以函数编程为主时,因为函数编程追求的是贫血对象,也就是对象的方法和属性是分离的,那么在这种情况下,我们就不必委屈使用类型Class作为贫血对象实现,而是直接使用数据结构,算法+数据结构=函数编程,多清晰简单?OOP派的人也不再抨击FP肢解他们的对象。
当我们以面向对象编程为主时,我们使用类型Class,OOP是讲究充血模型,也就是对象方法和属性是混合在一个Class中的。这样OOP派的人也能保全了其面向对象的完整封装性。
所以,从这点来看,虽然Swift和Scala都是FP和OOP的混合,但是Swift要比Scala做得到位,避免了两者混乱。
Swift强于Scala的第二点可能是性能,因为Swift的作者曾经开发过LLVM,对于性能的重视大概是其基因使然,这点就无需多言。
当然,同样作为函数语言,坚持不变性是语言的缺省,可变性是特殊的原则,Swift使用let表示不变性,等同于Scala的val,Swift使用var表示可变。不过一般只有在OOP时,我们使用对象来封装可变性,所以,我的大胆设想是,只有在类型class中才可以使用var,对象之外属于函数编程的天下,函数编程是讨厌可变状态的,因此干脆杜绝var使用,真正发挥函数编程无副作用的特点,这样,语言变量缺省默认都是不变性变量也就是常量,这样的语言是不是更简洁呢?
苹果Swift语言简明教程
[该贴被banq于2014-06-06 07:02修改过]