时间:2016-10-10来源:本站原创作者:佚名
浅谈Swift编程语言

在过去的几年中,移动应用程序风靡全世界并且已经改变了我们使用互联网进行工作或者休闲的方式。为了创建移动应用程序,各种技术应运而生,同时开发过程也开始将其作为一等公民来对待。尽管移动似乎已经无处不在了,但是它的未来才刚刚开始。我们正面对着新一代的移动设备,例如可穿戴设备以及组成物联网的大量移动工具。我们将会面对新的用来展示数据和接受命令的用户界面。同时,我们将会看到越来越多的公司真正地实现移动优先。所有的这一切都将会影响我们在未来的几年中设计、开发和测试软件的方式。

InfoQ的这篇文章是快速变化的移动技术世界中一系列文章的一部分。你可以通过这里订阅这一系列,届时如果有新文章发布那么会通知你。

苹果公司最近推出了Swift1.0——一门针对iOS和OSX开发的新编程语言。不要将苹果的Swift与老的并行脚本语言混淆。Swift的目标是让iOS和OSX开发变得更简单,更有乐趣。在本文中,我将会解释我认为Swift所具有的最具杀伤力的5个特性以及我为什么会这样认为的原因,虽然这些特性现在依然出于测试阶段,但是却值得我们一试。

苹果已经拥有了一门编程语言——Objective-C。那么为什么还要引入另一门编程语言呢?这是因为虽然Objective-C在被创建的时候可能已经非常地独特,同时也很先进,但是它现在并没有当今语言的味道。例如,在消费者方面像Ruby这样的脚本语言已经被广泛采用,这很大程度上得益于它干净的语法。在企业领域,具有类型推理能力的强类型(类型安全的)语言更受欢迎,为了将函数式编程语言所具有的函数即对象、Lambda表达式等经典特性引入进来,C#和Java(或者Scala)等语言都做出了大量的努力。Objective-C一直都缺少这类东西,例如干净的语法(和语法糖),类型推理。而Swift正是为了填补这个空白。

这并不是说Objective-C并不是一门优秀的编程语言。实际上,它是一门优秀的语言。但是我确实看到有足够的空间可以成功地替代Objective-C。进一步讲,同时也要感谢Swift的优秀,我认为Swift一定会像野火那样迅速蔓延开来。

现在,就让我们看看Swift都提供了什么吧。从语言的角度看,Swift是非常了不起的。苹果借鉴了Scala和C#这些现代语言的优点,构建了一门非常简单,但是功能非常强大的语言。它非常完美地融合了面向对象和函数式编程范式——但是说Swift是一门函数式语言是一种极大的延伸。下面就让我们看看Swift最具杀伤力的5个特性。

#1:语法糖

从语法上讲Swift非常华丽。它是一门非常简单、干净的语言,同时可读性也非常好,即使以现在的标准来衡量也是如此。你马上就会发现在设计一门语言的时候简单性是一个关键要素。例如,大家所熟知的语句末尾的分号。苹果决定将分号作为可选的,虽然这看起来相关性并不是非常强,但是它却让我们看到了苹果为了尽可能地保持语法干净所做出的努力。

简单性方面的其他例子包括字符串插入,以及语言对数组和循环处理的支持。

字符串插入

varmessage=“HelloWorld”“Themessageis\(message)”//ThemessageisHelloworldvara=1,b=2“Thesumis\(a+b)”//Thesumis3

循环

varlength=10foriin0..

数组

varlist=["a","b"]list+=["c","d"]

以上仅是Swift为简单性提供语言支持的一部分示例。需要注意的是你依然可以使用Array类的“append”方法连接数组,而苹果之所以走了额外的一英里将其构建为语言的一部分目的是为了展示他们设计Swift的目标。

如果你想学习Swift并对一些这样的示例代码进行测试,那么可以尝试下Xcode6,它的代码实时预览(Playground)功能太酷了,简直无法用语言形容。实时预览功能让你能够实时地随着你的输入对代码进行测试。它会执行你在开发环境中输入的所有内容,提供与变量值、函数调用返回值以及特定代码块被执行的次数相关的详细信息。打开Xcode6中的实时预览功能非常简单:

(单击放大图片)

下面的图片展示了实时预览功能:

(单击放大图片)

#2:函数是一等对象

越来越多的语言将函数作为一等公民并支持高级函数。例如,最近发布的Java8引入了Lambda表达式。它的理念很简单,就是让函数可以接受函数类型的参数,同时也可以将函数作为返回值。理念的简单性奠定了它强大的基础,因为这样支持更多的抽象。例如,我们可以将一个“过滤(filter)”函数应用到一个数组,该过滤函数接受数组中的每一个条目作为参数,通过特定的标准对条目进行判定从而完成对给定数组的过滤。使用更加通用的方法的关键是能够接受函数类型的参数。下面就让我们看看定义函数的语法。

Swift定义函数的语法与传统的Haskell这样的函数型语言相似,但并不完全一样。箭头(-)的左边是参数以及参数的类型,右边是返回值类型。在本文的示例中,我们想要过滤一个数字列表,因而基于一个给定的数字我们会返回一个Bool类型。在这种情况下,函数看起来可能是这样的:

(Item:Int)-Bool

这段代码的意思是接受一个Int类型的参数,返回一个Bool类型的值。很显然,你可以包含多个参数,但是不太明显的是,你还可以返回多个值,而这不需要创建一个容器对象。在后面的示例中,函数会返回一个元组。

一个过滤整数的函数定义可能是这样:

functbigNumbersOnly(item:Int)-Bool{returnitem3}

现在,我们已经创建了自己的过滤函数,下面让我们看看可以接受函数参数类型的“filter”函数。

varnumbers=[1,2,3,4,5]varbigOnes=numbers.filter(bigNumbersOnly)

在这个示例中,filter是一个高阶函数,因为它的参数类型是函数。在Swift中,函数也是对象,这意味着我们可以定义内联函数:

varnumbers=[1,2,3,4,5]varbigOnes=numbers.filter({(item:Int)-Boolinreturnitem3})

或者我们也可以将函数赋值给某个变量,稍后再使用它:

//definetwovariablesoftypefunctionvarbiggies={(item:Int)-Boolinreturnitem3}varthrees={(item:Int)-Boolinreturnitem==3}//decidewhichonetoapplyatruntimevarresult=numbers.filter(onlyThrees?threes:biggies)

当今,将函数作为对象,让用户能够像使用参数那样引用、传递函数已经成为一种优美的标准。而Swift实现方式的简洁性依然是一个值得称道的地方,这一核心概念配合类型推理可以让你事半功倍。

#3:强类型与类型推理

在企业开发领域,我们非常习惯于使用强类型(或者说类型安全的)语言。强类型语言通常会给我们带来一点额外的自信,因为它能够在编译时进行错误检查,如果这些语言也能够支持类型推理那么将会是一种非常好的体验。例如,可以这样:

//WithoutTypeinferencevarx:String="bar"//WithTypeinferencevary="bar"

注意,第二行的语句并没有声明变量的类型。因为Swift知道“bar”是一个字符串,所以我们并不需要显式地定义它的类型,当然我们也可以指定,正如第一个语句那样。这看起来好像并没有特别大的作用,但是如果推理的是函数的类型那么它就会变得十分有趣。

那么如果不使用类型我们应该如何定义之前例子中的函数呢?下面的代码展现了Swift的实现:

//$0willmaptothefirstparameter,$1tothesecond...varresult=numbers.filter({return$0==3})

没有比这更简洁的了!如果你的参数不止一个,同时想要通过名字引用参数,那么可以这样做:

{a,binreturnab}#4泛型

Swift提供的另一个非常便利的特性是泛型。在企业开发领域,泛型首先被引入到了C#中,在获得了大量的







































北京白癜风费用
北京治疗白癜风哪家医院更正规

转载请注明原文网址:http://www.gzdatangtv.com/bcyytx/1103.html

------分隔线----------------------------