Swift是苹果公司于2014年推出的一门全新的编程语言,目前已进化至第三版。Swift博众编程语言之所长,简单易学,功能强大,可用于开发iOS、macOS、tvOS、watchOS程序。
出于个人的兴趣,我下载了Swift官方文档《The Swift ProgrammingLanguage》的中英文版,并在工作之余对文档进行了仔细的阅读。在阅读的过程中,我越发地感受到了Swift的强大。简单地说,Swift是一门智能型的语言,为程序员解决了在使用很多其他的编程语言的过程中所经常遇到的问题。
下面,我就拿Swift和C语言进行对比,用几个例子为大家展示Swift为何是“智能”的。
1.程序样式
大家都知道,C语言(以及很多其他语言)的程序入口点都是main函数,我们要将程序语句放到main函数中,才会得到我们想要的执行结果。
例如,最简单的,我们想要在屏幕上输出“Hello, world!”,C语言的实现代码如下:
而如果我们使用Swift来实现,那么就只需要一行代码:
也就是说,在Swift中,一行代码就是一个完整的程序。全局作用域中的代码会被自动作为程序的入口点,因此也不需要main函数了。
很多程序员都有这样的经历:花费了很多时间在数万行代码中寻找main函数,结果发现main函数正躲在某个僻静的地方看着自己。在Swift中,我们可以从上到下阅读代码,全局作用域中的第一行代码就相当于main函数了。
此外,在C语言(以及很多其他语言)中,每条语句的结尾必须用分号来结束,很多时候程序编译不通过的原因就是某条语句结尾的分号忘写了。但是,在Swift中,我们不需要在每条语句的结尾添加分号,只要这条语句的语法是完整的就可以了。
从程序样式可以看出,Swift提高了程序员编写和阅读代码的效率,让大家不必拘泥于固定的程式,可以较为自由地编写代码。
2.变量声明
在C语言中,我们声明变量的语句如下:
每个变量都必须要指定其类型,如果不这样做,程序编译就会不通过。
在Swift中,声明变量的时候可以不用指定其类型,但需要赋初值,编译器会自动推断其类型,代码如下:
可以看到,我们用var声明变量,age的初值为30,因此编译器会推断该变量是整型;str的初值是字符串,因此编译器会推断该变量是字符串(String)。
在Swift中,我们用let来声明常量。与声明变量一样,声明常量的时候也可以不用指定其类型,但需要赋初值,编译器会自动推断其类型,代码如下:
从上面代码可以看出,age的初值为30,因此编译器会推断该变量是整型常量;str的初值是字符串,因此编译器会推断该变量是字符串(String)常量。
想必很多程序员都遇到过变量未指定类型或指定了错误的类型而程序出错的情况,Swift为大家解决了这个问题。从变量类型的自动推断中也可以看出,Swift具备一定的“智能”。
3.输出打印
在C语言中,我们用printf函数来输出变量的值或打印日志,语句如下:
在Swift中,我们用print函数来输出变量的值或打印日志。当只需要输出变量值时,语法如下:
当需要打印包含变量值的日志时,语法如下:
可以看到,Swift简化了输出操作,直接将变量放到print函数(该函数自带回车换行)中即可输出结果。如果要输出包含变量值的信息,只需要将变量名放到小括号中,同时在括号前面添加反斜杠就可以了。而在C语言中,变量的输出信息必须要和变量名分离开来。
当需要输出的变量值个数很多时,printf函数很容易出现前后变量个数不一致的情况,从而导致程序报错甚至崩溃,例如下面的程序:
在上面的代码中,我们本来想让printf函数输出7个变量的值,但后面只罗列了6个变量,程序运行就会出错。但在Swift中,这种情况就不会发生,因为每个需要打印值的变量就直接写在了输出消息中,不需要寻找前后的对应关系:
上面的3个例子为大家展示了Swift与其他编程语言不同的一面,可以说它的出现解决了长期以来困扰广大程序员的一些痛点和难点,为大家打开了一片全新的天地。那么,Swift是否受到了大家的欢迎呢?下面是TIOBE的2016年10月编程语言排行榜前20名的名单,Swift位列第12名,较去年同期有所上升。考虑到Swift也才推出来两年,这个排行算是不错的了。
顺便提一下,为了推广Swift,苹果公司已经将其开源。这是Swift的开源地址,大家可以多多关注:https://swift.org/。