接着昨天的进度继续学习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函数式编程风格学习相关推荐

  1. Python学习笔记__4章 函数式编程

    # 这是学习廖雪峰老师python教程的学习笔记 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程 ...

  2. python函数式编程读取数据-python学习笔记9:函数式编程

    函数式编程(FunctionalProgramming) 基于lambda演算的一种编程方式 程序中只有函数 函数可以作为参数,同样可以作为返回值 纯函数式编程语言: LISP, Haskell Py ...

  3. 学习笔记:Python3 函数式编程

    仅为个人查阅使用,如有错误还请指正. 函数式编程是一种抽象计算的编程模式. 函数式编程的特点 ​ 1.把计算视为函数而非指令. ​ 2.纯粹的函数式编程语言编写的函数没有变量. ​ 3.支持高阶函数, ...

  4. 【Python学习笔记】- 06 函数式编程

    1 什么是函数 函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码块. 2 使用函数的好处 减少重复代码 程序容易扩展 保持代码的一致性 3 如何定义一个函数 以def关键词开头,后接函数的 ...

  5. Hive学习笔记三之函数操作

    文章目录 5 函数 5.1 系统内置函数 5.2 常用内置函数 5.2.1 空字段赋值 5.2.2 CASE WHEN THEN ELSE END(类似于java中的switch case) 5.2. ...

  6. SurfaceFlinger学习笔记(三)之SurfaceFlinger进程

    概述 本系列是基于android Q 即android10 SurfaceFlinger学习笔记(一)应用启动流程 SurfaceFlinger学习笔记(二)之Surface SurfaceFling ...

  7. motan学习笔记 三 motan Demo 分析

    motan学习笔记 一 微博轻量级RPC框架Motan motan学习笔记 二 motan架构分析 motan学习笔记 三 motan Demo 分析 motan学习笔记 四 motan Demo 之 ...

  8. Spark学习笔记[1]-scala环境安装与基本语法

    Spark学习笔记[1]-scala环境安装与基本语法   正所谓工欲善其事必先利其器,Spark的开发语言不是java而是scala,虽然都是运行于JVM,但是两门语言的基本特性还是有些不一样,这里 ...

  9. Python学习笔记三之编程练习:循环、迭代器与函数

    Python学习笔记三之编程练习 1. 编程第一步 # 求解斐波纳契数列 #/user/bin/python3#Fibonacci series:斐波那契数列 #两个元素的总和确定了下一个数 a,b= ...

  10. java8 函数式编程_您必须学习Java 8的函数式编程吗?

    java8 函数式编程 我最近一直在研究Java 8,并掌握了Manning出版的" Java 8 In Action" . 让我印象深刻的第一件事是Java 8独特的销售主张是函 ...

最新文章

  1. # 30 天精通 RxJS (01):认识 RxJS
  2. 第十二周项目1-阅读程序(三)
  3. _mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h':no such file or directory
  4. LA3403 天平难题
  5. oracle给换服务器,Oracle数据库更换服务器10分钟切换方案
  6. 清洁数据ploy n_清洁屋数据
  7. linux网站目录在哪_果核建站教程【二】环境安装与搭建第一个网站
  8. MongoDB索引类型
  9. python3.3使用tkinter实现猜数字游戏代码
  10. 笔记本安装CentOS环境
  11. [design decision] user awareness: 自动安装还是不自动安装?
  12. linux awk sed经典题,awk与sed命令面试题整理
  13. 【燕秀工具箱】模具辅助下载安装使用手册
  14. sqlserver2008导入mysql_SQL Server 2008怎么导入sql文件?-SQL Server 2008导入sql文件的三种方法 - 河东软件园...
  15. 射手影音播放器android,射手影音播放器安卓版
  16. 易捷行云大规模云数据中心小时级安装部署|轻运维之安装部署
  17. cf英文名字格式好看的_cf好看的英文名字格式
  18. 失物招领|基于Web的校园失物招领系统的设计与实现
  19. 新浪博客大赛:你刷我也刷?
  20. ultraedit软件下载

热门文章

  1. FreeMarker中获取Map内容
  2. Helloworld之Spring依赖注入/控制反转(DI/IoC)版
  3. 阿里云ecs 服务器配置 nginx https
  4. oracle_dblink配置
  5. 软件需求模式阅读笔记之一
  6. 2011/05/19
  7. js页面间通信方法实现
  8. vue-devtools安装及使用
  9. CoreJavaE10V1P3.10 第3章 Java的基本编程结构-3.10 数组(Arrays)
  10. EXECUTE IMMEDIATE oracle介绍