Swift初体验
因为工作需要,写了一个post文本到todaysmeet的小工具。工具不是重点,主要是这次是使用Swift写程序,写一点感受。
一、文件结构变化
新建工程,发现亲切的main函数没了,还真有些不习惯。其实动态语言早就把main去掉了,没了main函数写起来更随心所欲。代码从上至下执行,有那么点动态语言的意思。
import也做了简化,同一工程中不再需要手动包含。这要多亏编译器的智能,想起之前文件总是被人塞一大堆头文件引用,现在除了第三方framework,其它完全不需要。
二、单一类文件
类的声明和实现都在同一文件中了,以后工程文件数量直接减少一半。这种做法早被java广泛实践过了,好处自然不必细说。以后不必纠结 跳转到定义/声明 之间的区别。附带还有一个好处:给第三方提供代码时被强制使用接口。
三、后置声明
第一次见到这种声明方式是在go语言上,其惊讶程度不亚于写C的人第一次看到Objective-C的方括号!明显是用过之后才能体会他的美妙。后置声明有几个明显的好处:
- 使用者更关注变量而非变量的类型。Swift作为一门强类型的语言,是有意弱化开发者对类型的关注度,包括随处可见的自动类型推导。
- 避免类型理解混淆。C语言类型声明很复杂,特别是函数指针。现在Swift也有些函数化编程的倾向,包括加强了的闭包,如不修改声明方式,这种返回类型很难写。
- 省略返回值。现在函数返回void可以省略了
四、可选类型
不知道这是不是Swift首先发明的,能极大的增强程序的健壮性,可以避免很多对nil的错误访问。由于对可能的错误返回预知,Swift这次去掉了异常!
抛出异常其实是很不好的设计,它假设调用者已正确处理好,反而降低了调用者对错误的判断,从而导致crash。比如C++捕获异常开销非常大,还有潜在的内存泄漏,真是一大败笔。我特别支持去掉异常,转而通过代码显式错误处理。
五、语言优化
这次终于有了常量,对编译器优化多少有点作用。
条件判断的隐示转换,这次去掉了,风格上有了统一。
字符串插值借鉴了ruby,方便了不少。
总结:以上只是在写todaysmeet中的一些感受,官方文档中还有更多有趣的高级特性。Swift这门新语言确实吸收了很多语言的长处,写起来很畅快,又不牺牲运行效率。只是目前还处于发展中,等到稳定还需要一些时间。但毋庸置疑的是,Swift绝对比Objective-C更好用。