3.Scala函数式编程-控制结构

  • 判断(if表达式)
  • 循环(while/do语句)
  • 枚举(for表达式)
  • 匹配(match表达式)
  • 异常处理(throw/try)
  • 输出(print/println)
  • 输入(readLine)

3.1 判断(if表达式)

  • 检测语句是否为真,并执行之后的语句
    • if(A) B ; else C (“;”号能省略吗?)
    • A可以是任意返回布尔值的语句,或是布尔值的量,真则执行B,假则执行C;
    • 当B为空时,可写成 if(!A) C
      • def min(x:Int,y:Int)={
        • var a=x
        • if(x>y) a=y
        • return a
        • }
    • if表达式能用以赋值
      • def min(x:Int,y:Int)= if(x>y) y else x

3.2 循环(while/do)

  • while语句包括状态判断与循环体,只要当前状态判断为真,就执行循环体一遍;然后进行下一次状态判断,判断为假时终止循环。
    • while(A) B
  • do语句与while相反,先执行循环体一遍,然后进行状态判断,状态判断为真,则继续执行循环体,否则终止循环。
    • do B while(A)

3.3 枚举(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语句中使用if语句进行过滤

    • for(i <- e) if(A) E(i)
  • for语句中能使用多个if语句进行过滤,if语句间不用“;”间隔

  • for语句实现嵌套枚举,只要多加入一个<-字句

  • 为了阅读和理解的方便,可以断行,或用花括号{}代替外层的()

  • for语句除了对枚举值进行操作并释放该值外,可以用以赋值,即把每一次枚举的值记录在集合中

  • for(i <- e) yield E(i)

    • 若E(i)由花括号括起,yield须在花括号外,即for(i <- e) yield {E(i)}

3.4 匹配 (match表达式)

  • match表达式类似于其他语言的switch语句,提供多个备选项中进行选择
    • a match{
    • case e1 => E1
    • case e2 => E2
    • … …
    • }
  • 若a匹配𝑒1则执行𝐸1,若a匹配𝑒2则执行𝐸2,如此类推
  • a可以是数组、任意类型值等, 𝑒𝑛可以是对应的值、常量、变量、甚至是类型
  • match表达式能用以直接赋值,如
    • val sign = a match{case e1 => 123; case e2 =>“123”}
  • 匹配是从上而下的

3.5 异常处理(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}

3.6 输入输出

  • 输出通常使用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()

3.7 其他语句

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

3.8 控制循环结构实战

/**
 * 控制结构 
 */ 
val a = 10 
val b = 5 
//if 
if(a > 5 && b == 5) println("yes") 
//if-else 
if(a > 5 && b != 5){ 
    println("yes") 
} else println("no") 
//if-else if-else 
if(a < 5){ 
    println("option1") 
} else if(a > 5) { 
    println("option2") 
} else println("option3") 

/**
 * while循环 
 */ 
var c = 4 
while(c>0){ 
    println(c) 
    c-=1 //修改条件变量 
}

                         
/**
 * for循环 
 */ 
for( i <- 1 to 3) print(i) 
val lis1 = List(1,2,3,4) 
for(i <- lis1) if(i%2==0) print(i) 
for(i <- lis1 if i%2==0) print(i) 
for(i <- lis1) print(i) lis1.foreach(print) //等价于上面 
val news = for(i <- 1 to 4 if i!=3) yield ("res"+i)
print(news) 

//求最大公约数 
var a1 = 12 
var a2 = 24 
while(a1 != 0){ 
    val tmp = a1 
    a1 = a2%a1 //修改条件变量 
    a2 = tmp 
}

大数据视频推荐:
CSDN
大数据语音推荐:
企业级大数据技术应用
大数据机器学习案例之推荐系统
自然语言处理
大数据基础
人工智能:深度学习入门到精通

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值