文档章节

scala函数式编程

泡海椒
 泡海椒
发布于 2016/04/09 20:26
字数 1486
阅读 46
收藏 3

 结构
 学会使用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语句进行控制

© 著作权归作者所有

泡海椒
粉丝 11
博文 282
码字总数 288344
作品 0
成都
程序员
私信 提问
Springboot中使用Scala开发

使用SB與Scala 項目代碼 本章項目代碼: https://github.com/LightSwordSpringBoot/lightsword JVM上的語言家族 JVM上的語言 1)Clojure是一个函数编程语言(functional programming language...

程序员诗人
2016/06/26
0
0
[转]Scala是个有趣的语言

经常读我的博客的人应该知道,我最喜欢的编程语言是Haskell。我喜欢函数式编程,Haskell是一个能把函数式编程推向极致的语言。虽然如此,我仍然时刻关注着其它新兴的和即将产生的编程语言,特...

mj4738
2011/11/01
296
0
Scala 是个有趣的语言

[英文出处]:Why Scala Is Interesting [中文翻译]:外刊IT评论 经常读我的博客的人应该知道,我最喜欢的编程语言是Haskell。我喜欢函数式编程,Haskell是一个能把函数式编程推向极致的语言。...

鉴客
2010/08/18
1K
1
Scala与Clojure函数式编程语言青春焕发

在StackOverflow发布的2015开发者调查,最受程序员喜爱的开发语言中,Clojure和Scala分别位列第五和第六。排名第一的是 Swift,而Swift相比原先的Objective-C最重要的优点之一,就是对函数式...

图灵教育
2015/05/21
416
0
Scala之初步认识与环境准备

了解 Scala 1.1. 什么是 Scala Scala 是 Scalable Language 的简写,是一门多范式的编程语言。 Scala设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟...

飞鱼说编程
2018/12/19
31
0

没有更多内容

加载失败,请刷新页面

加载更多

在Linux下使用linuxdeployqt发布Qt程序

目录 一、简介 二、安装linuxdeployqt 三、配置 qt 的环境变量 四、打包应用程序 五、编写linux桌面图标启动(可选步骤) 六、编写开机脚本 runApp.sh 七、打包成deb包 八、扩展 回到顶部 一...

shzwork
31分钟前
4
0
Linux进程管理

计算机硬件层面之上是操作系统,狭义的操作系统主要指系统内核,内核有以下作用:进程管理、文件系统、网络管理、内存管理、驱动程序、安全功能。内核可以将用户无法操作的底层硬件接口进行抽...

lhdzw
昨天
4
0
Java13的新特性

Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 Java13的新特性 Java14的新特性 序 本文主要讲述...

go4it
昨天
8
0
IDEA 配置Springboot项目热部署

实现的方式概述 注意以下的热部署方式在IDEA是默认没有打开自动编译的,手动编译需要快捷键(Ctrl+Shift+F9),自动编译的修改配置如下:(注意刷新不要太快,会有1-2秒延迟) File-Settings-C...

小强的进阶之路
昨天
10
0
免费数据分析工具:secsoso

前段时间思考了理想数据分析平台,之后我们根据这个思路开发了spl语言并提供了一个数据分析平台,这个平台主要用在搜索ES,数据库索引中的数据。但后来发现对文件的事后处理也是个非常重要的...

赛克蓝德
昨天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部