Swift是花拳绣腿吗?——谈谈开发语言与程序员的职业发展

更新时间:2015-07-30 09:42:56 点击次数:2468次

随着WWDC 2015的举行,Swift 2.0面世,不仅带来了更多的新特性,更被苹果寄予厚望,有可能代替Objective-C成为iOS平台的标准开发语言。那么Swift能否替代Objective-C成为新的王者?现有的项目是否需要迁移?我们是否应该马上开始学习Swift呢?在本问中,笔者将从语法特性,学习成本,代码效率,生态环境4个方面入手,对Swift和其他现代语言进行分析、对比,共同探讨App开发趋势和职业发展前景。

首先我们考察一下Swift究是一个什么样的变成语言。在2014年苹果的WWDC(世界开发者大会)上,Swift首次亮相。苹果号称Swift有3大特性:



 

安全特性中首先介绍的是变量和常量的类型安全:

例如在下面的代码中,Swift用关键字let声明常量,关键字var声明变量。

 

 

在声明时可以指定常量和变量的类型,也可以不指定类型,而是直接赋值。Swift会通过所赋值的类型自动将定义变量的类型。

如果声明时不进行赋值,那么每个类型的变量都有自己的默认值。

例如Double类型的变量,默认值是0。这点与Objective-C、C++和C语言不同,不对变量赋值的话,那么变量的默认值是一个随机数。如果不注意这点,则很容易由此导致Bug的产生。使用Swift语言则可以避免这种情况发生,所以说Swift是类型安全的。

另一个安全特性是在流程控制方面。例如下面代码中switch语句有2个case语句。分别代表legCount为0和为1至13奇数的情况。然而显然除了这两种情况之外,legCount还可能是其他的值,比如:2或15等等。

 

Swift的语法规定,如果case语句不能覆盖所有可能的情况,则必须加default语句来处理其他情况。否则编译不能通过。

这样可以避免由于程序员疏忽,流程没有被switch-case经过处理,而引起的逻辑错误。

我们可以看到Swift中的安全特性确实有助于新手减少Bug和逻辑错误。但是类似于“变量声明时就有初始值”的特性在JavaScript,C#等多种现代语言中早已实现了。

在功能强大方面,有一个特性中是对字符串操作的简化,在下面的代码中,Swfit可以用\(a)的形式,代替C语言中对字符串format操作。大大简化了代码,增加了程序的可读性。

 

无独有偶,在WWDC2015中,苹果在新版的Safari和WebKit中增加了一个针对JavaScript的新特性。这个特性可以使用${变量}的符号,代替传统的使用“+”对字符串进行拼接的操作。

 

在项目实践中,类似的字符串拼接应用较多的是日志操作。一般都已经封装成为组件了。所以,虽然这种语法可以简化代码,但对于工程的影响不大。

另一个与功能强大相关的特性是对Unicode的支持。

例如下面的代码中可以直接使用苹果的emoji图标写程序。每一个小老鼠的图标可以作为一个字符(character)处理。

 

网上还有网友利用Swift的这个特性写了一个诺亚方舟的故事。

 

另一个强大的功能是For-in语句的增强。

比如在For-in语句中使用0…4表示循环时取[0,4]的闭区间内整数值。

 

还可以在For-in中使用“元组”遍历Dictionary。

 

另外用“n…m”的形式表示[n,m]闭区间的语法也可以应用在switch-case语句中:

 

以上就是苹果WWDC2014中对Swift功能强大方面的一些介绍。然而,从上面的例子可以看出,这些新特性更像是一些语法糖。语法糖在维基百科上的定义如下:

语法糖(Syntactic sugar),也译为糖衣语法,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。

维基百科上除了有语法糖,还有“语法盐”和“语法糖精”2个概念。分别代表特别难用的语法,和看似很好用但实际有害的语法。 比如在Swift beta版中,在for-in语句中可以使用“n..m”语法,表示从n开始,循环m次。例如:

 

但是在正式版中,这种写法被取消了。因为“n..m”和“n…m”这两种写法太相似了,如果都保留就会引起混淆,降低程序的可读性,成为“语法盐”或者“语法糖精”了。

现在评价Swift中的新语法是语法糖还是语法盐还为时尚早,需要时间和市场的检验。


本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

回到顶部
嘿,我来帮您!