Scala学习笔记03【学习识别Scala函数式风格】
2015-10-04 16:48
477 查看
Scala允许用指令式风格编程,但是鼓励采用一种更函数式的风格。
学习用函数式风格编程将不仅让你变成更好的Scala程序员,而且还能拓展你的视野并使你变成通常意义上好的程序员。
考虑下面这个改自于第2章的while循环例子,它使用了var并因此属于指令式风格:
可以通过去掉var的办法把这个代码变得更函数式风格,像这样:
或这样:
这个例子演示了减少使用var的一个好处:
重构后(更函数式)的代码比原来(更指令式)的代码更简洁,也更少机会犯错。
Scala鼓励函数式风格的原因,实际上也就是因为函数式风格可以帮助你写出更易读懂,更不容易犯错的代码。
更函数式的方式应该是定义对需打印的arg进行格式化的方法,但是仅返回格式化之后的字串,如下所示:
代码没有副作用或var的函数。
现在才是真正函数式风格:满眼看不到副作用或者var。
Scala不是强迫你用函数式风格编任何东西的纯函数式语言,它是一种指令式/函数式混合的语言。
在某些情况下指令式风格更符合你手中的问题,在这时候你不应该对使用它犹豫不决。
只有在特定需要和判断之后才选择var,可变对象和有副作用的方法。
学习用函数式风格编程将不仅让你变成更好的Scala程序员,而且还能拓展你的视野并使你变成通常意义上好的程序员。
指令式和函数式编程差异:
如果代码包含了任何var变量,那它大概就是指令式的风格。 如果代码根本就没有var--就是说仅仅包含val--那它大概是函数式的风格。 因此向函数式风格推进的一个方式,就是尝试不用任何var编程。
考虑下面这个改自于第2章的while循环例子,它使用了var并因此属于指令式风格:
def printArgs(args: Array[String]): Unit = { var i = 0 while (i < args.length) { println(args(i)) i += 1 } }
可以通过去掉var的办法把这个代码变得更函数式风格,像这样:
def printArgs(args: Array[String]): Unit = { for (arg <- args) println(arg) }
或这样:
def printArgs(args: Array[String]): Unit = { args.foreach(println) }
这个例子演示了减少使用var的一个好处:
重构后(更函数式)的代码比原来(更指令式)的代码更简洁,也更少机会犯错。
Scala鼓励函数式风格的原因,实际上也就是因为函数式风格可以帮助你写出更易读懂,更不容易犯错的代码。
更函数式的方式应该是定义对需打印的arg进行格式化的方法,但是仅返回格式化之后的字串,如下所示:
def formatArgs(args: Array[String]) = args.mkString("\n")
代码没有副作用或var的函数。
现在才是真正函数式风格:满眼看不到副作用或者var。
Scala不是强迫你用函数式风格编任何东西的纯函数式语言,它是一种指令式/函数式混合的语言。
在某些情况下指令式风格更符合你手中的问题,在这时候你不应该对使用它犹豫不决。
Scala程序员的编程思维
崇尚val,不可变对象和没有副作用的方法,首先想到这些。只有在特定需要和判断之后才选择var,可变对象和有副作用的方法。
相关文章推荐
- 【Redis常见问题】
- salt stack的远程命令如何执行-笔记
- Spring s2sh 整合(二)
- 信息安全系统设计基础第四周学习总结
- 如何盗取别人的QQ密码
- pat1022Digital Library (30)
- LintCode 丢失的第一个正整数
- 小圆大圆转圈问题
- SQL Server与Oracle的一些区别
- Java——Thread/Runnable实现多线程
- win10预览版10558怎么样 win10预览版10558上手体验视频
- Java——Thread/Runnable实现多线程
- XML数据解析-SAX和DOM
- Shell基础-Bash变量-用户自定义变量
- Python爬虫的一些总结
- 零碎知识点(未分类)
- HTTPS协议简介
- linux c 获取硬盘序列号
- 杭电acm1302
- Java-递归算法思想