Scala入门(2)

1 函数式编程思想

  • 纯函数,没有副作用
    即没有诸如修改全局变量、抛出异常、IO读写和调用有副作用的函数等状态变化
  • 参数和函数体都是引用透明
    即对于相同的输入,总是得到相同的输出。反例:append函数。
    为了获得引用透明性,任何值都不能变化。
  • 函数是一等公民
    Scala中函数就像普通变量一样,同样也具有函数的类型。
    Scala入门(2)_第1张图片
  • 高阶函数:用函数作为形参或返回值的函数
  • 闭包

2 语言基础

2.1 变量

val、 var、 lazy val
注:当定义的变量可能后续不会用到时可使用lazy val

2.2 数据类型

Scala入门(2)_第2张图片

  • Unit:表示空,val x:Unit=(),val x=()
  • Null:scala中通常不会使用null而是使用option
  • Nothing:表示程序异常中止,若一个函数返回nothing表明该函数发生异常
  • String:支持字符串插值,用${name}可在字符串里引入name这个变量代表的字符串

2.3 函数与代码块

2.3.1 代码块

代码块Block是表达式,最终的值是最后一个表达式的值,Block有两种表达方式:

  • {exp1;exp2}
  • {
    exp1
    exp2
    }

2.3.2 函数

Scala入门(2)_第3张图片

  • 只有一个表达式的时候可以去掉花括号
  • 有些简单的表达式scala会自动推断出返回类型

2.4 if与for

2.4.1 if

if (lofical_exp) valA
if (lofical_exp) valA else valB·

2.4.2 for

是实现循环的推导式,本质是scala的函数向Map、Reduce组合而实现的,是scala的语法糖的一种。
Scala入门(2)_第4张图片

2.5 try与match表达式

2.5.1 try

try是表达式,会返回一个值
Scala入门(2)_第5张图片

2.5.2 match

类似c++的switch
Scala入门(2)_第6张图片

3 求值策略

scala中所有运算都是基于表达式。默认是call by value,函数调用前会对实参中所有的表达式进行求值。
Scala入门(2)_第7张图片
举个栗子:
Scala入门(2)_第8张图片
Scala入门(2)_第9张图片

4 高阶函数

4.1 函数与匿名函数

  • 函数类型:A=>B,表示一个接受类型A的参数,并返回类型B的函数
  • 高阶函数:用函数作为形参或返回值的函数
  • 匿名函数:函数常量,格式为:{形参列表}=>{函数体}
    例:(x:Int, y:Int) => x + y

4.2 柯里化

把具有多个参数的函数转换为一条函数链,每个节点是单一参数
在这里插入图片描述
Scala入门(2)_第10张图片

4.3 递归与尾递归

在函数式编程中,所有的循环都是通过递归实现。
在这里插入图片描述
递归层数多,容易造成堆栈溢出。为了解决这个问题,于是出现了尾递归。
Scala入门(2)_第11张图片
举个栗子:
Scala入门(2)_第12张图片
Scala入门(2)_第13张图片

5 Collections-list基本使用

Scala入门(2)_第14张图片

5.1 List[T]

val a=List(1,2,3,4)
val b=0::a
val c="x"::"y"::Nil
val d=a:::c
a.head //返回当前List的第一个元素
a.tail //返回当前List除了第一个元素外剩下元素组成的列表
a.isEmpty
Nil,Empty

Scala入门(2)_第15张图片

List的高阶函数

Scala入门(2)_第16张图片
Scala入门(2)_第17张图片
在这里插入图片描述

  • 参数都是匿名函数
  • takeWhile遍历到False时就停止了
  • 区分map与flatMap

6 集合的归约操作

6.1 reduceLeft

Scala入门(2)_第18张图片

6.2 foldLeft 更通用

Scala入门(2)_第19张图片

6.3 Rang与Stream

Scala入门(2)_第20张图片
Scala入门(2)_第21张图片
Scala入门(2)_第22张图片

6.4 tuple与map

Scala入门(2)_第23张图片
Scala入门(2)_第24张图片

Scala入门(2)_第25张图片
举个栗子:实现快速排序,每次取元素为a.head,把小于a.head放在前面,大于的放在后面。
Scala入门(2)_第26张图片

你可能感兴趣的:(Scala,scala)