您的位置:首页 > 移动开发 > Swift

苹果公司的“拿来”之道:Swift借自其它编程语言的10大功能

2015-01-11 21:47 267 查看


苹果公司在创建Swift这门语言时借用了哪些做法

套用一句名言:好的艺术家借鉴,伟大的艺术家偷师。不过,您所见到的却是,在创建Swift这门最近推出的iOS编程语言时,苹果公司从其他的开发语言那里直接搬用了好些功能。从时间概念上来说Swift可能是“新”的,但仔细翻看它的文档,您就会发现Swift更像是一些已被用在其他编程语言中的流行理念的一个集合,这些理念被放在一起捣碎,再冠以一个新的名称。

本文接下来列出Swift的一些最突出的功能,并向您揭示它们的最初来源,这通常包括了一条可回溯几十年的语言链。这一语言链并不具决定性,在许多情况下,Swift的灵感源自一种更早的语言中包含的理念。这是一种悠久的创新传统。

文中代码示例来自Swift文档。


1. 字典(又称哈希表)——源自JavaScript

JavaScript程序员在方括号中放入整数来表示传统的数组,或是使用方括号接收之后可作为哈希表使用的字符串,这都是有历史的事了。现在,Swift程序员也可以这样做了,苹果公司把哈希表称作“字典”,并提供了一种更简洁的初始化语法。




2. 数据类型的推断——源自函数式编程语言

对于程序员来说,强制把变量指定为特定的数据类型,这是一种在代码运行之前就可以捕捉到错误的有效手段,编译器会检查数据类型和标记的不兼容情况。

当然,在如今的编程工作中,已没有人愿意通过一一点击键盘来为每个变量指定数据类型,最近推出的一些最好的编辑器已开始提供数据的类型推断功能,在变量已被初始化的情况下,这通常很容易做到。这一功能最初出现在一些函数式语言如ML中,此后又陆续出现在Haskell、Scala和Opa等语言中。现在,Microsoft也在.Net的3.0版本中加入了该功能,这一功能实际已进入主流行列。多谢Swift,iOS开发者现在也可以省下一些按键的功夫了。




3. 数据结构声明——源自C#和Java

哪种类型的数据会被存放到数据结构中呢?Java在第5个版本中引入了泛型(Generic),这样编程者就能够告诉编译器哪些数据类型会被压入哈希映射(HashMap)、数组(Array)或是集合(Collection)中,大于号和小于号组成的尖括号被用来指定哪些类型可被存入其中。大约是同一时期,Microsoft也在C#中加入了这一声明。现在,轮到了Swift,使用Swift的程序员现在也能够告诉编译器,预期类型是哪些了。




4. 字符串模板——源自Cold Fusion、JSP和其他一些语言

计算机对数字的处理可追溯至很早之前,不过现在看来,程序员的大部分工作倒像是在串接各种字符串。许多编程工具都提供了一些方法来把变量的值插入串模板中。诸如Cold Fusion和Java Server Page一类的Web工具一早提供了一种把数据和模板中的HTML脚本粘合起来的简易做法。

Swift提供了一个很时尚的模板系统,先是一个转义符加左括号,后面紧跟着要计算的表达式,最后是一个右括号。若要使用此功能,最少只需通过键盘输入三个额外的字符便可。




5. 可选的分号——源自JavaScript和Python

和分号能有什么仇什么恨呢?它们不过是指定编程语句结束的一种简单方法,但不知何故,越来越多的程序员就是不耐烦输入它们。

在过去几年中,一些JavaScript和Python程序员已就分号是否真的有必要输入做过一番争论:分号是必需的,还是仅为一种良好的编码风格?对于这场争论,Swift显然倾向于分号在语句的末端是可有可无的这一论点。若想把多个表达式写在同一行中,那么您必需使用分号,不过若是写成不同行,就无需劳动您的右小指来按下分号键了。




6. 协议(又称作接口)——源自Java和C#

当程序员使用Java和C#精心打造面向对象的类结构时,他们通常以最基本的接口为基础。接口是一种定义了类必须提供的函数的结构的基类,类若要符合定义,就必须提供所有这些函数。Swift使用“协议(protocol)”这一术语来勾勒类集合的一个蓝本。




7. 元组——源自Lisp和Python

有时候,方法需要返回多个值,早期的Lisp一类语言把一切当成列表或元组处理,现在,诸如Python等更多语言提供了显式的语法,把方法返回的N个值和N个要和它们绑定的变量一一匹配。Swift也遵循了这一传统。




8. 自动引用(类似垃圾收集)——源自Java、C#和(苟延残喘的)Objective-C

早期的一些报道认为Swift纳入了垃圾收集功能,这是一些自动执行的例程,它们扫描内存,回收其中已不再处于使用状态的那部分字节。Java和C#程序员很喜欢垃圾收集功能,至少在出现该功能导致机器停滞一两秒这一情况之前是这样。Swift使用自动引用计数,这是一种很受Objective-C用户欢迎的类似解决方案,但其实是一种换汤不换药的做法。




9. 有符号和无符号整数——源自C#和Objective-C

好的系统程序通常意味这在字节层面工作,不过,诸如Java一类抽象语言避开了无符号整数的复杂性,而其他的一些语言,比如说C#,则提供无符号整数。Swift提供一、二、四和八个字节的有符号和无符号整数——类似Objective-C的做法,这各类整数须得很好地加以区分使用。




10. 闭包——源自Lisp和Scheme,经由JavaScript壮大

JavaScript程序员喜欢把一小段匿名代码打包传递,类似函数一样使用。他们采用的这些闭包做法源自Lisp和Scheme一类语言,这些语言全面发展了Lambda函数这一概念。现在,Swift也提供了闭包和把函数作为一等对象进行传递的功能。




关于作者

Peter Wayner ---- 特约编辑



Peter Wayner是InfoWorld的特约编辑,也是超过16本书的作者,这些书涉及不同主题,其中包括了开源软件方面的(“Free
for All”)、无人驾驶汽车方面的(“Future Ride”)、隐私增强计算方面的(“Translucent Databases”)、数字化交易方面的(“Digital Cash”),以及隐写术方面的(“Disappearing Cryptography”)。他会定期在InforWorld网站上发表文章,也为大大小小的软件项目提供咨询服务。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: