点击围观!腾讯 TAPD 助力金融行业研发提效、敏捷转型最佳实践! 了解详情
写点什么

专访瀑布 IM 包涵卿:Swift 中的函数式编程

  • 2015-12-24
  • 本文字数:1744 字

    阅读完需:约 6 分钟

2016 年 1 月 10 日,第一次由国内社区主办的 iOS 开发盛会 Swift 开发者大会将在北京举行,本次大会旨在推动 Swift 语言在国内的发展,不但邀请了国外资深专家,社区的传奇人物,还邀请了拥有 Swift 实践经验的国内专家,为你在实际项目中使用 Swift 扫清障碍。

大 会讲师包涵卿来自瀑布 IM,作为客户端技术负责人,对多个平台的客户端研发有着丰富经验,他们也在使用 Swift 开发正式应用。在本次大会上,他将分享 Swift 中的函数式编程实践,会前他接受了 InfoQ 记者的采访,让我们提前来看看,函数式编程在 Swift 中有什么不同。

InfoQ: 请介绍一下您现在的工作,从什么时候开始使用 Swift 开发的?

包涵卿: 我目前在瀑布 IM 负责各种客户端的开发工作。因为我们团队对新的技术一直都是积极拥抱的态度,所以最初写瀑布 IM iOS 版的时候就选择了 Swift 作为开发语言。那时还是 Swift 1.1。一路走到现在的 Swift 2.1,差不多快一年时间了。目前我们 iOS 的代码 75% 左右是 Swift,正在朝 99% 的目标努力。

InfoQ: 看到您之前开发过 Mac 应用,您是否用 Swift 进行过 Mac 应用开发?您对 Swift 在非苹果生态(如 Linux、Win、服务端)的开发前景有何看法?

包涵卿: 在 Mac 上用 Swift 写过简单的命令行工具,不过我们的 Mac 版应用目前没有使用 Swift。因为在 Mac 端我们有不少 C++ 的代码,而 Swift 目前还不能兼容 C++。我个人很看好 Swift 在 Linux 上的前景。在其开源之前,社区的很多 Swift 开源项目(比如后端框架 Perfect)就已经做好了支持 Linux 的准备。苹果将其开源后的 24 小时内,Swift 在 Github 上的 star 数就突破了 10000,这是很了不起的成就。而明年将会发布的 Swift 3.0 会把 API 稳定下来,这对于应用和库的开发与部署都十分有利。Swift 本身是一门足够优秀的语言,再加上社区空前的热度,未来的发展值得期待。

InfoQ: 您是如何学习函数式编程的,对它怎么看?

包涵卿: 很多年前学习 HTDP 的时候开始接触函数式编程,就留下了非常深刻的印象。函数式编程帮助我们把关注点放在对问题的解上,而不是具体的实现步骤。这使我们可以在一个更高的层次 来思考,写出的代码自然也就更简练。现代编程语言或多或少都在吸纳函数式编程的概念和特性就能很好地证明其魅力了。

InfoQ: Swift 中使用函数式编程是否方便?在语言设计上支持是否足够好?

包涵卿: 很方便。其实 Swift 的设计一直在借鉴像 Haskell 这样的函数式语言,比如 WWDC 上苹果工程师就拿 Swift 和 Haskell 来对比 Sieve of Eratosthenes 算法的实现。Swift 强大的类型系统对函数式编程提供了良好的支持。其他像是 currying 的语法糖以及对尾递归的支持等也都是很好的证明。

InfoQ: 有人将 Swift 称为多范式编程语言,体现在哪里?如何让函数式编程和其它范式和谐共存?

包涵卿: Apple 官方其实把 Swift 称作 Protocol-Oriented 的语言。WWDC 上非常火的一个 session 甚至以此命名。但是这并不妨碍我们在 Swift 中写 OO 或者 FP 的代码。多范式和谐共存其实更多的时候是开发者的功课。Swift 已经对这些范式做了比较好的支持,关键就是看开发者本身对于这些范式的理解。不同的范式都有自身比较适合解决的问题,针对问题选择合适的范式即可。

InfoQ: 对 Swift 的函数响应式编程您怎么看?这种范式未来的前景如何?

包涵卿: FRP 是 Functional Programming 和 Reactive Programming 的结合。FRP 使我们可以用一种声明式的方式来处理数据的变化,是一种非常优秀的编程范式。FRP 这几年在开发者社区中越来越热,各种语言的 FRP 框架层出不穷。Swift 社区中比较知名的重量级 FRP 框架就有 RAC 和 RxSwift。不过未来前景如何还很难说。一方面两种范式本身都有一定的门槛,另一方面实践上现役的 FRP 框架在适配新特性、调试等方面都会给开发者带来一些挑战。个人觉得这种范式如果不获得官方的支持,想要让开发者大规模应用到产品代码中还是会比较难。

InfoQ: Swift 中的函数式编程对团队协作会带来什么影响?

包涵卿: 首先就是要在团队中普及函数式编程的概念。没有相关背景的开发人员接受函数式编程往往需要一个过程。语言层面比较需要注意的是自定义的操作符。这在函数式 编程中是比较常见的,但是对于不熟悉的人,就会导致代码的可读性直线下降了。这方面就要靠有更好的沟通机制和知识传递机制了。

2015-12-24 06:401796
用户头像

发布了 164 篇内容, 共 99.9 次阅读, 收获喜欢 387 次。

关注

评论

发布
暂无评论
发现更多内容

爬虫入门经典(十二) | 一文带你快速爬取豆瓣电影

不温卜火

python 爬虫

前置机器学习(一):数学符号及希腊字母

caiyongji

机器学习

它终于来了!

Python研究所

Python

一文看懂特权访问管理(PAM)

龙归科技

云计算 云存储

初来乍到,请多关照

空城机

杂记

爬虫入门经典(四) | 如何爬取豆瓣电影Top250

不温卜火

python 爬虫

Git教程 - Git 命令与操作

码语者

git DevOps

MyBatis-Plus实现自动填充createTime和updateTime

棉花糖

springboot MyBatisPlus

第九周作业

yoki

助力香港成为全球寿命最长的城市,我们如何看医管局的数字化转型?

有只小耳朵

数字化转型 人才培养

Three.js杂记(二)——绘制点、线、面

空城机

JavaScript 大前端 WebGL 3D可视化 three.js

如何巧妙的去除数组中的空格?

程序媛观澜

c++ 字符串

前置机器学习(四):一文掌握Pandas用法

caiyongji

机器学习

我提升开发效率的经验

流沙

程序员 成长笔记 成长与思考

Three.js杂记(四)—— 更好的运动:TweenMax

空城机

大前端 3D渲染 3D可视化 three. webg

高阶文件操作

Python研究所

Python 文件处理

前置机器学习(三):30分钟掌握常用NumPy用法

caiyongji

机器学习

新思科技BlackDuck帮助Avira软件公司在保持DevOps速度的同时提升开源安全

InfoQ_434670063458

前置机器学习(二):30分钟掌握常用Jupyter Notebook用法

caiyongji

机器学习

Three.js杂记(三)—— 物体运动

空城机

JavaScript 大前端 WebGL 3D可视化 three.js

源码分析Netty:核心组件及启动过程分析

程序员架构进阶

架构 Netty 源码剖析 28天写作 3月日更

Prophecis 0.2.0 版本发布

WeDataSphere

机器学习 大数据 学习 WeDataSphere

机器学习(一):5分钟理解机器学习并上手实践

caiyongji

机器学习

Three.Js杂记(一)——起步

空城机

大前端 WebGL 3D可视化 three.js

爬虫入门经典(七) | 一文带你爬取淘宝电场

不温卜火

python 爬虫

爬虫入门经典(十五) | 邪恶想法之爬取百度妹子图

不温卜火

python 爬虫

如何利用VGG19实现insightface人脸识别?

程序媛观澜

机器学习 人脸识别

Python-计算机视觉-OpenCV-Image

Aldeo

Python OpenCV 计算机视觉

爬虫入门经典(十八) | 滑动验证码识别

不温卜火

python 爬虫

LeetCode题解:198. 打家劫舍,动态规划(不缓存偷盗状态),JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

前置机器学习(五):30分钟掌握常用Matplotlib用法

caiyongji

机器学习

专访瀑布IM包涵卿:Swift中的函数式编程_移动_徐川_InfoQ精选文章