scala学习笔记三----scala函数式编程风格学习
接着昨天的进度继续学习scala,现在的所有东西仅仅是借助课本的帮助,在scala的交互式shell中进行简单的写一下代码,也想借此学习一下最基本的语法,掌握基础,下面是今天 的笔记记录内容:
1.识别函数式风格
在scala中,val 和 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鼓励函数式风格的原因,实际上也就是因为函数式风格可以帮助你写出更易读懂,更不容易犯错的代码
重构后的 printArgs 方法并不是纯函数式的,因为它有副作用——本例中,其副作用是打印到标准输出流。函数有副作用的马脚就是结果类型为 Unit。如果某个函数不返回任何有用的值,就是说其结果类型为Unit,那么那个函数唯一能让世界有点儿变化的办法就是通过某种副作用。更函数式的方式应该是定义对需打印的 arg 进行格式化的方法,但是仅返回格式化之后的字串,如下:
def formatArgs(args: Array[String]) = args.mkString("\n")
println(formatArgs(args))
可以通过检查结果来测试 formatArgs:
val res = formatArgs(Array("沂", "水", "寒","城"))
assert(res == "沂\n水\n寒\n城")
Scala 的 assert 方法检查传入的 Boolean 并且如果是假,抛出 AssertionError。如果传入的 Boolean 是真, assert 只是静静地返回。
结果如下:
scala> def formatArgs(args: Array[String]) = args.mkString("\n")
formatArgs: (args: Array[String])String
scala> val res = formatArgs(Array("沂", "水", "寒","城"))
res: String =
沂
水
寒
城
scala> assert(res == "沂\n水\n寒\n城")
参考:
《scala编程中文版》
上一篇博客给出了下载链接
scala学习笔记三----scala函数式编程风格学习相关推荐
- Python学习笔记__4章 函数式编程
# 这是学习廖雪峰老师python教程的学习笔记 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程 ...
- python函数式编程读取数据-python学习笔记9:函数式编程
函数式编程(FunctionalProgramming) 基于lambda演算的一种编程方式 程序中只有函数 函数可以作为参数,同样可以作为返回值 纯函数式编程语言: LISP, Haskell Py ...
- 学习笔记:Python3 函数式编程
仅为个人查阅使用,如有错误还请指正. 函数式编程是一种抽象计算的编程模式. 函数式编程的特点 1.把计算视为函数而非指令. 2.纯粹的函数式编程语言编写的函数没有变量. 3.支持高阶函数, ...
- 【Python学习笔记】- 06 函数式编程
1 什么是函数 函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码块. 2 使用函数的好处 减少重复代码 程序容易扩展 保持代码的一致性 3 如何定义一个函数 以def关键词开头,后接函数的 ...
- Hive学习笔记三之函数操作
文章目录 5 函数 5.1 系统内置函数 5.2 常用内置函数 5.2.1 空字段赋值 5.2.2 CASE WHEN THEN ELSE END(类似于java中的switch case) 5.2. ...
- SurfaceFlinger学习笔记(三)之SurfaceFlinger进程
概述 本系列是基于android Q 即android10 SurfaceFlinger学习笔记(一)应用启动流程 SurfaceFlinger学习笔记(二)之Surface SurfaceFling ...
- motan学习笔记 三 motan Demo 分析
motan学习笔记 一 微博轻量级RPC框架Motan motan学习笔记 二 motan架构分析 motan学习笔记 三 motan Demo 分析 motan学习笔记 四 motan Demo 之 ...
- Spark学习笔记[1]-scala环境安装与基本语法
Spark学习笔记[1]-scala环境安装与基本语法 正所谓工欲善其事必先利其器,Spark的开发语言不是java而是scala,虽然都是运行于JVM,但是两门语言的基本特性还是有些不一样,这里 ...
- Python学习笔记三之编程练习:循环、迭代器与函数
Python学习笔记三之编程练习 1. 编程第一步 # 求解斐波纳契数列 #/user/bin/python3#Fibonacci series:斐波那契数列 #两个元素的总和确定了下一个数 a,b= ...
- java8 函数式编程_您必须学习Java 8的函数式编程吗?
java8 函数式编程 我最近一直在研究Java 8,并掌握了Manning出版的" Java 8 In Action" . 让我印象深刻的第一件事是Java 8独特的销售主张是函 ...
最新文章
- # 30 天精通 RxJS (01):认识 RxJS
- 第十二周项目1-阅读程序(三)
- _mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h':no such file or directory
- LA3403 天平难题
- oracle给换服务器,Oracle数据库更换服务器10分钟切换方案
- 清洁数据ploy n_清洁屋数据
- linux网站目录在哪_果核建站教程【二】环境安装与搭建第一个网站
- MongoDB索引类型
- python3.3使用tkinter实现猜数字游戏代码
- 笔记本安装CentOS环境
- [design decision] user awareness: 自动安装还是不自动安装?
- linux awk sed经典题,awk与sed命令面试题整理
- 【燕秀工具箱】模具辅助下载安装使用手册
- sqlserver2008导入mysql_SQL Server 2008怎么导入sql文件?-SQL Server 2008导入sql文件的三种方法 - 河东软件园...
- 射手影音播放器android,射手影音播放器安卓版
- 易捷行云大规模云数据中心小时级安装部署|轻运维之安装部署
- cf英文名字格式好看的_cf好看的英文名字格式
- 失物招领|基于Web的校园失物招领系统的设计与实现
- 新浪博客大赛:你刷我也刷?
- ultraedit软件下载