码迷,mamicode.com
首页 > 其他好文 > 详细

Scala--控制结构和函数

时间:2016-08-22 19:49:32      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

一、条件表达式

val s = if(x > 1) 1 else -1

s 可以是 val

 

var s = 0
if(x > 1) s = 1 else s = -1

s 必须是 var

 

表达式 val s = if(x > 1) 1 else -1的类型是Int

混合类型表达式

if(x > 1) "hello" else -1

一个是String,一个是Int,公共超类型是Any。

 

if(x > 1) 1 或 if(x > 1) 1 else ()

()表示Unit, "无有用值", 当做java中的void.

 

 

二、语句终止

每条语句,行尾不需要使用分号,如果在单行中写下多个语句,就需要将他们分号隔开。

if (n > 0) {r = r*n; n -= 1}

在写较长的语句,分两行来写的话,第一行不能用表示结尾的符号结尾,比如操作符

s = s0 + s1 * s2 +
s3 * 0.5 + s4

推荐使用花括号

if( n > 1) {
    r = r * n
    n -= 1
}

 

 

三、块表达式和赋值

val dis: Int = { val a = 2; val b = 4; a+b}
println(dis)

语句块的返回值取最后一个表达式,这里为 a+b的结果。

 

val n: Unit = { val a = 3}
println(n)

赋值语句的返回值是Unit类型类似于java中的void,结果为()

 

注 不要这样赋值

y = x = 1

x = 1的结果为Unit,则y的值为Unit

 

四、输入和输出

输出:

print("Answer:")
println( 42 )

println("Answer:" + 42)

//格式化输出使用printf    
printf("My name is %s, I am %d years old.\n", "Fred", 42 )

格式化输出使用printf

换行输出println

 

输入:

val name = readLine("You name:")
print("Your age:")
val age = readInt()
printf("Hello %s, next year, you will be %d years old.\n", name, age + 1)

readLine读取一行,带参数提示符。

readInt, readChar, readFloat, readDouble, readByte, readShort, readBoolean, readLong

 

五、循环

while循环

while(n > 0){
    n = n*r
    n -= 1
}

 

for循环   变量 i 在之前并不需要指定

for(i <- 1 to 10){
    println(i)
}

until 返回一个并不包含上线的区间,最后一个值为 s.length-1

val s = "hello"
for(i <- 0 until s.length) {
    println(s(i))
}

scala没有与java for(;;)循环相关的结构

 

scala没有提供continue和break语句来退出循环,如果需要break时,我们该如何操作?

  • 使用Breaks对象中的break方法,breakable是函数
    import scala.util.control.Breaks._

    breakable{
      for(i<- 0 to 10){
        if(i == 4){
          break
        }
        println(i)
      }
    }
  • 使用嵌套函数,在函数中调用return
    def func(): Unit ={
        for(i<- 0 to 10){
          if(i == 4){
            return
          }
          println(i)
        }
      }
      func()
  • 使用boolean型的控制变量
    for(i<- 0 to 10 if i < 4){
      println(i)
    }

 

六、高级for循环和for推导式

变量<-表达式 表示生成器

提供多个生成器

for(i<- 1 to 3; j<- 1 to 3) print ( i*10 +j +" ")
结果:11 12 13 21 22 23 31 32 33

类似于Java的嵌套for循环

 

每个生成器可以带一个守卫  以if开头的Boolean的表达式

for(i<- 1 to 3; j<- 1 to 3 if i != j) print ( i*10 +j +" ")
结果:12 13 21 23 31 32

 

定义任意多的变量,在循环中使用

for(i<- 1 to 3; from<- 4 to i; j<- from to 3) print ( i*10 +j +" ")
结果:12 13 21 23 31 32

 

推导式  for的循环体以yield开始,循环会构造出一个集合,每次迭代生成集合的一个值

for(i<- 1 to 10) yield i % 3
结果 Vector(1, 2, 0, 1, 2, 0, 1, 2, 0, 1)

推导生成的集合与它的第一个生成器是类型兼容的

for(c<- "Hello"; i<- 0 to 1) yield (c+i).toChar   //第一个生成器是 c<-"Hello"
for(i<- 0 to 1;c<- "Hello") yield (c+i).toChar    //第一个生成器是 i<- 0 to 1
结果:HIeflmlmop
     Vector(H, e, l, l, o, I, f, m, m, p)

 

Scala--控制结构和函数

标签:

原文地址:http://www.cnblogs.com/one--way/p/5796604.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!