APP下载

使用Swift构建应用程序在实践教学中的应用

2018-12-06镇江技师学院李佳琳黄向东

电子世界 2018年22期
关键词:枢轴游乐等待时间

镇江技师学院 李佳琳 黄向东

本文将着重探讨Swift中涵盖高级FP的使用,因此通过现实世界情况来思考这些概念,将会在教学中对学生学习Swift有所帮助。在这种情况下,假设正在构建一个游乐园的应用程序,并且该公园的乘坐数据由远程服务器上的API提供。在Xcode中创建一个新的playground。

首先将以下内容添加到playground:

通过更改变量,可以创建可变状态。单独或在相对简单的系统中,可变状态不是什么大的问题。但是,当将许多对象连接在一起时,例如在大型面向对象系统中,可变状态会产生许多令人头疼的问题。例如,当两个或多个线程访问相同的变量同时,它们可能会修改或访问失灵,导致意外行为的发生。这包括竞争条件、死锁和许多其他问题。想象一下,如果你可以编写状态永远不会发生变化的代码。并发系统中出现的一大堆问题就会消失。可以通过创建不可变状态来执行此操作,因此不允许在程序过程中更改数据。使用不可变数据的主要好处是:使用它的代码单元没有副作用,这意味着代码中的函数不会改变自身之外的元素,并且在函数调用发生时不会出现任何怪异的效果。在本文中使用的主要数据是一个不可变的Swift常量时会发生什么。

要讨论的最后一个概念是递归,只要函数将自身称为其函数体的一部分,就会发生递归。在函数式语言中,递归有效地替换了命令式语言中使用的循环结构。当函数的输入导致再次调用函数时,这被认为是递归情况。为了避免无限的函数调用堆栈,递归函数需要一个基本案例来结束它们。让我们为您的游乐设施添加递归排序功能。

如果等待时间较短,认为一次乘坐比另一次乘坐少,如果乘坐的名称相同,认为它们相等。现在,扩展Array到包含一个quick-Sorted方法:

该算法首先选择一个枢轴元素。然后将收藏分为两部分;一部分保持所有小于或等于枢轴的元素,另一部分保持剩余元素大于枢轴。然后使用递归对两部分进行排序。请注意,通过使用递归,不需要可变状态。使用如下代码验证功能:

第二行确认quickSorted没有修改传入的数组。要记住的一件事是,递归函数确实有一些额外的内存(堆栈)使用和运行时开销,但是它们通常比它们更混乱的命令式对应物更优雅,并且这不应该是较小数据集的问题。

通过考虑以下问题,可以将在此学到的大部分内容与FP相结合,并清楚地展示函数式编程的一些优点。一个有小孩的家庭希望在休息之后尽可能多地游玩,所以他们需要找到哪些适合儿童的游乐设施有最短的线路。通过等待时间少于20分钟的所有家庭游乐设施帮助他们,并按等待时间(升序)对其进行排序。

如上所写,命令式代码很好,但快速浏览并不是很清楚,直接地了解它正在做什么。必须暂停以详细查看算法才能掌握它。如果回来做一些维护,调试或者将其交给新开发人员怎么办?FP可以做得更好。生成的代码是声明性的,这意味着它是自我解释的,并且读起来就像它解决的问题陈述。这与命令式代码不同,命令式代码类似于计算机必须采取的步骤来解决问题陈述。

通过以上实例,可以更清晰地使学生懂得,Swift不是一种纯函数式语言,但它结合了多种编程范例,为提供应用程序开发的灵活性。开始使用FP技术的好地方是在Model层,ViewModel层以及应用程序的业务逻辑出现的任何位置。对于用户界面,使用FP技术的地方不太清楚。反应式编程是用于UI开发的类似FP的方法的示例。例如,RxSwift是用于iOS和macOS编程的反应库。通过采用功能性的声明式方法,的代码可以更简洁明了。同样,当的代码被隔离到没有副作用的模块化功能时,的代码将更容易测试。最后,随着多处理核心成为CPU和GPU的标准,最小化副作用和并发问题将变得越来越重要,FP将是实现平稳性能的最重要方式之一!

猜你喜欢

枢轴游乐等待时间
给学生适宜的等待时间
——国外课堂互动等待时间研究的现状与启示
面向神经机器翻译的枢轴方法研究综述
探讨参数区间估计中枢轴量的选取——以单个正态总体均值为例
冬奥游乐会
矿用卡车厢斗枢轴销外窜原因分析及加固措施
动物游乐汇
景观文化展示森林公园游乐魅力
音乐游戏玩起来
——新春游乐汇
意大利:反腐败没有等待时间
抽水蓄能电站球阀枢轴轴套故障分析及改造