Scala编程 控制结构

if, try, for, match

if

1 if控制结构可以产生值,三元操作符的行为与if一致,也被称为if, while和do...while控制结构不能产生值,结果类型是Unit,尽量减少使用while

2 因为if可以返回值,代码可以如下优化

var filename = "hellokitty"
if(!args.isEmpty)
  filename = "byekitty"

val filename = 
  if(!args.isEmpty) "hellokitty" 
  else "byekitty"

3 对于结果类型是Unit的方法,返回值被称为unit value,写作(),将方法执行结果与()相比总为true


for

1 generator语法

val fileList = (new java.io.File(".")).listFiles  // 当前目录包含的目录和文件,返回数组
for(file <- fileList)  // 每一次循环,新的val类型file都被初始化,file可以通过类型推断知道是File类型
  println(file)

file <- fileList被称为generator语法

2 until不包含上边界

   to包含上边界

3 for表达式中添加filter,使用if子句过滤条件,子句使用;隔开

for(file <- fileList if file.getName.endsWith(".scala"); if file.isFile)
  println(file)//只输出.scala且是文件的file

4 mid-stream变量绑定和嵌套枚举

def grep(pattern : String) = 
  for{ //花括号 且多个<-形成嵌套枚举
    file <- filesHere
    if file.getName.endsWith(".Scala")
    line <- fileLines(file)
    trimmed = line.trim //变量绑定
    if trimmed.matches(pattern)
  } println(file + ": " + trimmed)

如果for表达式由generator和filter,可以使用花括号,可以省略分号

嵌套枚举是for表达式添加了多个 <-

mid-stream变量绑定是在产生将绑定值到新变量

5 yield

for{子句} yield {循环体} 

yield将每一次循环体中的结果记录下来,生成一个数组


try

1 抛出异常的类型是Nothing类型

看下面这段代码,如果n不是偶数,那在给half赋值之前,已经抛出了异常,这样做是安全的

val half = 
  if(n % 2 == 0)
    n /2
  else
    throw new RuntimeException("n is not even")

2 try-catch-finally也产生值

def urlFor(path: String) =
  try{
    new URL(path)
  } catch {
    case e: MalformedURLException => new URL("http://...")
  }

3 Scala中,下面这个例子返回1

def g(): Int = try{ 1 } finally { 2 }


match

number match{
  case 1 => println("1")
  case 2 => println("2")
  case _ => println("ha?")
}


变量范围

1 范围定义与Java一致

2 可以定义同名的变量,只要不在同一范围内

val a = 1
val a = 2 //编译不通过
println(a) 

val a = 1
{
  val a = 2 //编译通过
  println(a) 
}
println(a)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值