scala函数式编程

…衆ロ難τιáo~ 提交于 2019-12-06 00:51:40

 结构
 学会使用Scala中主要的结构控制语句
 数组
 学会数组的声明与使用
 映射
 了解Scala中的映射的基础知识
 包与引用
Scala控制结构
 判断(if表达式)
 循环(while/do语句)
 枚举(for表达式)
 匹配(match表达式)
 异常处理(throw/try)
 输出(print/println)
 输入(readLine)
判断(if表达式)
 检测语句是否为真,并执行之后的语句
 if(A) B ; else C (“ ;”号能省略吗?)
 A可以是任意返回布尔值的语句,或是布尔值的量,真则执行B,假则执行C;
 当B为空时,可写成 if(!A) C
 def min(x:Int,y:Int):Int={
var a=x
if(x>y) a=y
return a
}
 if表达式能用以赋值
 def min(x:Int,y:Int)= if(x>y) y else x


循环(while/do)
 while语句包括状态判断与循环体,只要当前状态判断为真,就执行循环体一遍;然后
进行下一次状态判断,判断为假时终止循环。
 while(A) B
 do语句与while相反,先执行循环体一遍,然后进行状态判断,状态判断为真,则继续
执行循环体,否则终止循环。
 do B while(A)
 m -= 1 m=m-1; m+=1 m=m+1
 var m=3 var m=3
 while(m!=0){ do{
 println(m) println(m)
 m-=1 m-=1
 } }while(m!=0)


枚举(for表达式)
 For表达式能用任意条件进行各种形式枚举,而在枚举的过程中能实现绝大部分的循环
功能且不必使用变量。
 for(i <- e) E(i)
 for表达式包括发生器(i <- e)同函数体E(i),
 发生器是遍历e中的元素,每一次枚举名为i的新的val就被初始化
 对于每一次枚举,函数体E(i)都会执行一次,而其中的参数i由枚举时进行赋值
 e可以是各种集合,包括数组、列、表达式等,或是有上下界的数值范围:
 1 to 4 (1=<i<=4);1 until 4 (1=<i<=4-1)(不包含上界)
 for(i <- 1 to 4)
println(“No.”+ i)


枚举(for表达式)
 在for语句中使用if语句进行过滤
 for(i <- e) if(A) E(i)
 for(i <- 1 to 4)
 if(i%2==0)
 println(“No.”+ i)
 for语句中能使用多个if语句进行过滤,if语句间不用“ ;” 间隔
 for(i <- 1 to 4)
 if(i%2==0)
 if(i!=2)
 println(“No.”+ i)
 能把if语句写入循环体,而非函数体中,此时要使用“;” 间隔
 for(i <- 1 to 4;if i%2==0;if i!=2)println(“No.”+i)


枚举(for表达式)
 for语句实现嵌套枚举只需要多加一个<-字句
 for(i <- 𝑒1)for(j <- 𝑒2)E(i,j)
 for(i <- 𝑒1;j <- 𝑒2)E(i,j)
 for(i <- 𝑒1;if A;j <- 𝑒2;if B)E(i,j)
 嵌套枚举并非是同时进行的枚举;形如for(i <- 1 to 4;j <- 1 to 2),其枚举形式是,先
枚举i = 1,再完整枚举j = 1,j = 2;然后是枚举i =2,再完整枚举j = 1,j =2
 循环体的<-语句顺序是影响循环结构
 出于理解和阅读要求,对于较长的循环体或者函数体,可以进行分行


枚举(for表达式)
 for语句除了对枚举值进行操作并释放该值外,可以用以赋值,即把每一次枚举的值记
录在集合中。
 for(i <- e) yield E(i)
 若E(i)由花括号括起,yield须在花括号外,即for(i <- e) yield {E(i)}
 val No=
for(i <- 1 to 4)
yield i
yield保留字返回的类型跟for循环体第一个<-语句的集合类型相同,如非集合时,返回
的是序列


枚举(for表达式)
 for(i <- “HELLO”)yield i
 for(i <- 1 to 2)yield i.toChar
 for(i <- “HELLO”;j <- 1 to 2) yield (i+j).toChar
 for(i <- 1 to 2;j <- “HELLO”) yield (i+j).toChar
 分别返回什么结果呢?
 String:HELLO
 Vector<?,?>
 String:IJFGMNMNPQ
 Vector<I,J,F,G,M,N,M,N,P,Q>

匹配 (match表达式)
匹配 (match表达式)
 匹配语句case后接 _ 代表的是任意,一般在最后的case语句中这么写,即匹配不到上
面的值时,执行
 如 a match {
case e1 =>...
case e2 =>...
case _ =>....}
 匹配语句返回的值有多种类型时,Scala不能执行类型推断,并且只会返回Any类型
 如 val final=a match {
case e1 => “HI”
case e2 => ‘H’
case e3 => 123 }


异常处理(throw/try)
 Scala处理异常一般通过throw抛出一个异常并中止
 要么捕获并处理该异常,要么简单中止之
 异常抛出:throw new IllegalArgumentException
 异常捕获与处理:try{函数体} catch{case…;case…}
 异常捕获并中止:try{函数体} finally{A.close()}
 try{函数体} catch{case…;case…} finally{A.close()}
 throw、 try-catch-finally表达式都能生成值
 如:throw new IllegalArgumentException(“Error!”)
 def f():Int=try{1} finally{2}


输入输出
 输出通常使用print或println函数,后者在输出内容后追加一个换行符
 println(A) A可以是值、表达式等,如:
 println(“A”) println(“A”+1)
 当A是表达式时,输出的是表达式的运行结果
 输入通常使用read函数,如readLine是从控制台读取一行输入,指定类型时为readT
,T是所要指定的类型,如readInt等
 val name=readLine(“ Your name :\n” ) readLine带一个参数作为提示字符串
 val age=readInt()

其他语句
 return 语句表示返回某个值,但是Scala事实上无须使用return语句
 对于函数来说,其默认返回值是最后出现的一个值,不用特别注明。如需要返回的值
并非最后出现时,可在函数体后加上该值的标识符使之“出现”
 声明函数时使用return语句,必须声明返回值的类型,如def abd():T={return}
 break/continue在C++中非常常见的控制结构语句,但在Scala中是不必要的,可以
使用布尔值类型的量通过IF语句进行控制

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!