本期沙龙浅谈函数式编程
Posted 西邮Linux兴趣小组
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了本期沙龙浅谈函数式编程相关的知识,希望对你有一定的参考价值。
【本期沙龙】浅谈函数式编程
本次沙龙由小组16级成员娄泽豪同学主持,本期沙龙主题为“浅谈函数式编程”,大家可以通过点击左下角原文链接下载本期沙龙的PPT。
我们欢迎所有对这方面感兴趣的同学带着你的问题和观点,与我们一起探讨交流,相互学习,共同进步。
常见的编程范式
命令式编程
强调计算机每一步应该做什么,怎么做。目前,大部分的流行语言的主流编程范式都是命令式编程。例如: C、 Java。
声明式编程
强调计算机最终应当给语言使用者什么样的结果。这些语言一般有其专门的应用场景。例如: SQL、 Prolog。
函数式编程
给予函数更高的地位,要求“变量不可变”,“函数无副作用”等。目前很多传统的命令式语言都已经开始具有一定的函数式编程能力,例如: C++11、 Java8就引入了Lambda表达式。常见的函数式语言有: Lisp、 Haskell、 Scala等。
其他的编程范式
不仅仅限于这种分类方式,面向对象编程、面向过程编程也是重要的编程范式。
探秘函数式编程
绑定:变量值不变
表达式:“语句”都是表达式
高阶函数:像“变量”一样使用函数
集合上的高阶函数:函数式编程的利器
闭包:“代码生成器”
柯里化: 数学化的语言技法
部分施用:减少重复的传参
其他功能:记忆化、惰性求值、模式匹配
从函数式编程中汲取精华
不必学习新语言
正如前面所说,传统语言也变得更加函数式起来, Java 8提供了集合上一些高阶函数, C++ 11也开始支持Lambda表达式。这些都让你的代码变得更加简洁优雅。
匿名函数代替仅出现一次的函数
在Java 8以及C++ 11以后的版本,此两门语言开始支持Lambda表达式,从而提供了匿名函数特性。在使用需要提供函数指针作为辅助参数的函数,不再需要另行声明。
使用Lambda表达式减少命名空间污染
为了使算法清晰明确,有时解决某个问题的算法可能需要多个函数,但提供最终结果的函数仅仅有其中一个。我们可以通过Lambda表达式将辅助函数绑定到函数内部的函数指针上,从而使辅助函数不再对外暴露。
高阶函数代替重复部分
即使是C语言中,也可以使用函数指针来模拟高阶函数的运作,C标准库中利用了高阶函数实现了很多函数。
减少代码中不必要的可变量
代码中的可变量是影响多线程程序效率的一大重要因素,如果尽可能的减少这部分的内容,既使代码更加清晰,也使代码除错更容易,同时减少了线程间访问共享数据时用在加锁解锁上的时间。
处理高并发: Akka & Actor
Akka是一个用Scala编写的库,用于简化编写容错的、高可伸缩性的Java和Scala的Actor模型应用。
2017年10月15日 19:00
西安邮电大学 东区
教学楼东北 FZ118
以上是关于本期沙龙浅谈函数式编程的主要内容,如果未能解决你的问题,请参考以下文章