Scala入门(2)

1 函数式编程思想

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

2 语言基础

2.1 变量

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

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.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的语法糖的一种。
在这里插入图片描述

2.5 try与match表达式

2.5.1 try

try是表达式,会返回一个值
在这里插入图片描述

2.5.2 match

类似c++的switch
在这里插入图片描述

3 求值策略

scala中所有运算都是基于表达式。默认是call by value,函数调用前会对实参中所有的表达式进行求值。
在这里插入图片描述
举个栗子:
在这里插入图片描述
在这里插入图片描述

4 高阶函数

4.1 函数与匿名函数

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

4.2 柯里化

把具有多个参数的函数转换为一条函数链,每个节点是单一参数
在这里插入图片描述
在这里插入图片描述

4.3 递归与尾递归

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

5 Collections-list基本使用

在这里插入图片描述

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

在这里插入图片描述

List的高阶函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

6 集合的归约操作

6.1 reduceLeft

在这里插入图片描述

6.2 foldLeft 更通用

在这里插入图片描述

6.3 Rang与Stream

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.4 tuple与map

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
举个栗子:实现快速排序,每次取元素为a.head,把小于a.head放在前面,大于的放在后面。
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章