1 if
scala中的所有控制结构都是有返回值得。
scala中的if和java中的都差不多。就是风格不同
scala变成风格如下:
object ContolTest {
def main(args:Array[String]):Unit={
val filename= if(args.isEmpty) "default.txt" else args(0)
}
}
java的风格如下:
var filename_java="default.txt"
if(!args.isEmpty) filename_java=args(0)
2 while(不建议使用)
while也和java差不多的,但是scala中while,不返回值。而且在scala编程中避免使用while。1是大多数while会用到var,不太符合函数化编程的规范,2是因为 可能有bug。如下面功能,命令行读入,然后在显示功能:
var line=""
do{
line=readLine()
printf(line)
}while(line!="")
}
这个功能呢,很多人会写出如下形式:
while((line=readLine())!=""){
printf(line)
}
这种情况,会有警告,说是总是为true,陷入死循环,这说明什么呢,因为给var赋值时,返回的结果和字符串做比较,永远是不等的:
3for
java和scala的for循环基本类似,语法不一样,scala案例,枚举一个文件夹中所有文件名:
val filename_ok=(new File(".")).listFiles
for(file<-filename_ok){
println(file)
}
这是一种名为生成器的写法。且scala中是支持所有的集合类型。
3.2 for中的过滤
在scala中,可以设置过滤条件。如下,保留是文件的
for(file<-filename_ok
if file.isFile
)
{println(file)}
需要多个过滤条件的话,就使用多个if,这里每个if是 AND 的关系。
3.2使用for来生成新的集合
使用方式如下:
val files=for(file<-filename_ok
if file.isFile()
) yield file
for(file<-files)
println(file)
这里是把所有的文件结果,保存到files中。生成新的集合的使用方式是 for () yield body.
4 try的使用
额,也和java差不多,就是语法有些许差别。
直接抛出异常
值得注意的是,throw 也是有返回值的,当然了,这种写法,感觉没什么卵用.
val h =
if(5%2==0) 5/2
else
throw new RuntimeException("要偶数才可以")
捕获异常与finally的写法如下,和java一样,finally一般做一些清理工作
val f = new FileReader("test.txt")
try{
f.ready()
}
catch{
case ex:FileNotFoundException=>//missing file
case ex:IOException=>//I/O 错误
} finally{
f.close()
}