一 scala的内建控制特点
- 只有if、while、for、try、match和函数调用。
- scala从语法层面支持函数字面量导致scala内建控制结构少。
- 几乎所有的scala内奸控制对象都会产生值(while等除外),这样有助于缩短代码(不在需要临时变量保存控制结构中的计算结果)。
二 scala 内建控制结构之if
// if 方式1:
var filename_1="default.txt"
if(!args.isEmpty)
filename_1=args(0)
// if 方式2: 优化上面的代码
// 1:代码易于阅读和重构。
// 2:主要的优点:使用了val而不是var。
// 2.1 val体现了函数式编程的风格,并且具有与java的final变量类似的效果。
// 2.2 能够更好地支持等效理论(equalational reasoning).在表达式没有副作用的情况下,引入的变量等效于计算它的表达式
val filename=
if(!args.isEmpty) args(0)
else "default.txt"
三 scala内建控制之while与dowhile
- 两者与java的一样。
- while与do-while 之所以被称为“循环”,而不是表达式,是因为他们不能产生有意义的结果,结果类型为Unit “()”。
`
// while 循环
def fun2(x: Int, y: Int): Unit ={
var a = x
var b = y
while (a != 0 ) {
val tmp = a
a = b % a
b = tmp
}
b
println("b=" + b)
}`
// if 方式2: 优化上面的代码
// 1:代码易于阅读和重构。
// 2:主要的优点:使用了val而不是var。
// 2.1 val体现了函数式编程的风格,并且具有与java的final变量类似的效果。
// 2.2 能够更好地支持等效理论(equalational reasoning).在表达式没有副作用的情况下,引入的变量等效于计算它的表达式
val filename=
if(!args.isEmpty) args(0)
else "default.txt"
- 尽量对while的使用进行质疑,如同质疑var的使用一样。实际中while循环通常不是更新var就是执行IO。尽量用别的方式实现同样的功能。
四 Scala编程之for表达式
// for表达式:
//1 for 表达式 之枚举集合类:能够做的最简单的事情就是把所有元素都枚举一遍。其他语法你需要借助一个变量,随时会面临超位溢出。
//2 for 表达式之 过滤
def fun6(): Unit ={
val fileHere = (new File(".//src")).listFiles()
// 通过发生器(generator) 遍历每一个元素。
for (file <- fileHere
if file.getName.endsWith("Scala_6.scala")
) println(fileLines(file).length)
}
//3 for 表达式之Range类型。
def fun7(): Unit ={
// to 包含Range的上边界,until 不包括Range的上边界
for (i <- 1 until 4)
println(i)
}
//3 for 表达式之 嵌套枚举
val fileHere = (new File(".")).listFiles()
// def fun8(pattern:String)=(
// for(
// file <- fileHere
// if file.getName.endsWith(".scala")
// line <- fileLines(file)
// )
// )
// 4 for表达式之 制造新的集合;
// 格式:for {字句} yield (循环)
def fun8(): Unit ={
val fileHere = (new File(".//src")).listFiles()
val forLineLengths = for {
file <- fileHere
if file.getName.endsWith(".scala")
line <- fileLines(file)
trimmed = line.trim
if trimmed.matches(".*for.*")
} yield trimmed.length
}
def fileLines(file:File)= scala.io.Source.fromFile(file).getLines.toList
五 Scala编程之 try-finally
// scala 编程之try-finally
// 1:java的try-finally 不产生值,scala的行为会产生值。
def fun9(): Unit ={
try {
val f = new FileReader("input.txt")
// 使用并关闭流文件
} catch {
case ex: FileNotFoundException => print("文件没有发现") // 处理丢失的文件
case ex: IOException => // 处理其他的IO异常
}finally{
// 文件、套接字、数据库链接
}
}
六 Scala编程之match#
1:详见书籍
七 Scala编程之 不在使用break和continue#
1:用if与while代替,详见书籍
八 Scala编程之变量范围
1:scala中内部范围与外部范围可以定义相同名的变量,在java中实不允许的。scala中内部的同名变量会遮蔽外部的同名变量。
网友评论