为了账号安全,请及时绑定邮箱和手机立即绑定

Scala的控制结构和函数

标签:
大数据

控制结构和函数

先看以下简单的一个条件表达式的demo

object TestConditional {  def main(args: Array[String]): Unit = {    // scala的if判断表达式
    var x = 1
    if (x > 0) x = 10 else x = 20
    println(x)
  }
}

Scala的if/else语法结构与java一样,如以上代码一样,需要注意的是当else部分缺失了比如:if(x>0) 1,这个if语句没有输出值,但是在Scala中,每个表达式都应该有值,这个问题可以引入一个Unit类,写做()。不带else的这个if语句等同于 if (x>0) 1 else () Scala中没有switch语句,只需if即可解决所有。

  • 语句终止

在java和C++中,每一个语句都以分号结束,而在Scala中和JavaScript类似--行尾的位置不需要分号,因为Scala编译器能够从上下文明确判断出是语句的终止,但是若要在单行中写下多个语句,需要用分号隔开,例如下面的表达式需要分号隔开if (n > 0) {r = r * n; n-=1}
若是在写较长的语句,需要两行来写,需要告诉编译器不是语句结尾,例子如下:
x = y + (v - m) * d + // +告诉编译器不是结尾0.5 * (c - v) * t
  • 块表达式和赋值

在java中,块语句是一个包含与{}中的语句序列,在Scala中{}包含一系列表达式,在Scala中,赋值动作本身没有值,它们是Unit类型,相当于java中的void,而这个类型只有一个值,写做()
{r = r * n; n-=1}
  • 输入和输出

打印一个值可以使用print或者println函数,
例如: println("x="+"10"),另外还有一个带有C风格格式化的字符串printf函数例如:printf("hello, %S! welcome to Scala world.\n","michael")
也可以使用readLine函数从控制台读取一行输入,读取数字,Boolean或者是字符,可以永readInt,readDouble,readByte,readShort,readLong,readFloat,readBoolean或者readChar。
// 使用readLine
val name=readLine("your name:")print("your age")
val age = readInt()printf("hello,%s! you have %d year work experience",name,age)
  • 循环

Scala中没有与for(初始化变量值;变量布尔表达式;变量更新),Scala中有两个选择:一个是使用while循环,而是使用以下for语句
for (i<- 表达式)让变量i遍历<-右边的表达式的所有值,对于Scala集合比如Range而言,会取到集合中的每个值

Scala中没有提供break或者continue语句退出循环,一般可以有以下三种方法跳出循环:1. 使用Boolean型的控制变量2. 使用嵌套函数---使用return3. 使用breaks对象中的break方法import scala.util.control.Breaks._
breakable {    for(...) {    // 退出循环
        if(...) break;
    }
}
  • for循环推导式

Scala中的for循环比java要丰富的多,下面介绍其高级特性

    // 多个生成器
    for (i <- 1 to 3; j <- 1 to 3) print((10 * i + j) + " ")
    println()    // 守卫生成器,if前没有分号
    for (i <- 1 to 3; j <- 1 to 3 if i != j) print((10 * i + j) + " ")    // 可以定义变量,在循环中引入
    println()    for (i <- 1 to 3; from = 4 - i; j <- from to 3) print((10 * i + j) + " ")    
 for循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。Scala中for循环是有返回值的。如果被循环的是Map,返回的就是Map,被循环的是List,返回的就是List,以此类推。

scala> for (i <- 1 to 5) yield i
res10: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 3, 4, 5)
  • 函数

Scala中定义函数需要定义函数的名称、参数和函数体

 def abs (x: Double) = if (x >= 0) x else -x
 
 必须给出所有参数的类型,只要不是递归就不需指定返回类型。Scala会自动通过=符号右侧的表达式的类型推断出返回类型 
// 递归函数,必须指定返回类型def fac(n : Int) :Int = if (n<=0) 1 else n* fac(n -1)

以上代码都可以在github获取 https://github.com/codegeekgao/framework-skills/tree/master/scala-demo/src/main/scala/conditionalexpression
欢迎点缀加个star~~~


       作者:撩琼不止        
       出处:https://www.cnblogs.com/codegeekgao/p/9607608.html    
       本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消