订阅移动开发RSS CSDN首页> 移动开发

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

发表于2015-07-29 14:08| 次阅读| 来源CSDN| 0 条评论| 作者任旻

摘要:Swift 2.0的面世,带来了更多的新特性,同时被苹果寄予厚望。本文作者从语法特性、学习成本、代码效率、生态环境等诸多方面入手,对Swift和其他现代语言进行分析、对比,共同探讨App开发趋势和职业发展前景。

CSDN移动将持续为您优选移动开发的精华内容,共同探讨移动开发的技术热点话题,涵盖移动应用、开发工具、移动游戏及引擎、智能硬件、物联网等方方面面。如果您想投稿、参与内容翻译工作,或寻求近匠报道,请发送邮件至tangxy#csdn.net(请把#改成@)。 


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

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

  • 安全(SAFE)
  • 现代(MODERN)
  • 强大(POWER)


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

例如在下面的代码中,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中的新语法是语法糖还是语法盐还为时尚早,需要时间和市场的检验。

0
0