一 Scala 函数的定义
按照以下格式定义scala函数.
def 函数名称(函数输入参数类型){ //函数的实现提 } |
1) 第一个简单的例子 HelloWorld
object Test2 { def main(args: Array[String]):Unit = { println("HelloWorld") }
} |
a)可以看到输出语句的结尾没有以“;”结束,因为scala的设计者认为,多大一个字符对开发者来说是痛苦的。
他不太赞成在语句的结束写 “;” , 但你也可以写 “;” 结束
b)如果没有返回值内容,可以把 Unit去掉。如下所示。
object Test2 { def main(args: Array[String]) = { println("HelloWorld") ; } } |
2)没有输入参数的函数
def doWhile() { var line = "" do { line = readLine() println("Read: " + line) } while (line != "") } def main(args: Array[String]) = { doWhile
} |
在scala中定义函数的变量使用的关键字是 var ,哈哈,又找到了javascript的感觉。感觉就像是js的一个翻版。运行这段函数,在控制台输入任意字符串,可以看到函数有响应了,如果不输入任何值,直接按回车,程序停止运行。
其中 readLine()函数如起名一样,是读取一行输入的内容, 并输出读入的内容,并复制给变量line,然后打印出这个变量 。 调用函数 doWhile放在主程序入口main中。运行代码效果如下所示:
鼠标停留在 readLine()函数体上,按住 CTRL ,可以看到函数体的实现,可以发现是 Predef类里的一个函数。
Scala中默认会导入几个包,其中一个就有 Predef ,这里的包和java中的包是类似的,都是防止命名冲突,也就是说可以起相同的类名,但要放在不同的包下。
3)具有参数的函数定义
def looper(x: Long, y: Long): Long = { var a = x var b = y while (a != 0) { val temp = a a = b % a b = temp } b } def main(args: Array[String]) = { println(looper(100, 298)) } |
然后运行这段代码,得到以下值 :
2 |
4) 有逻辑运算的函数
def main(args: Array[String]) = { var file = "scala.txt" if (!args.isEmpty) { file = args(0) } println(file); } |
这段代码的是定义一个变量 file等于 "scala.txt",如果程序有输入值,就复制给变量file,如果没有输入值,就是用默认的名称"scala.txt".
在写一段打印输出1到10集合里的元素代码。在for循环体内通过箭头( <- ) 给变量复制。
def main(args: Array[String]): Unit = { for (i <- 1 to 10) { println("Number is: " + i) } } |
得到如下输出结果:
Number is: 1 Number is: 2 Number is: 3 Number is: 4 Number is: 5 Number is: 6 Number is: 7 Number is: 8 Number is: 9 Number is: 10 |
也可以写成 1.to(10), 因为1是一个对象,它有方法to,也可以输出同样的结果。
def main(args: Array[String]): Unit = {
for (i <- 1.to(10)) { println("Number is: " + i) }
} |
可以看出scala非常灵活,,它是一个完全面向对象的语言。按照“一切解释对象”的思想,1也是个对象,所以它有方法 to.
增强型的for 运算,打印当前目录下的文件。
def main(args: Array[String]): Unit = { val files = (new java.io.File(".")).listFiles() for (file <- files) { println("当前路径下有文件 -> "+file) } } |
运行代码得到如下结果:
当前路径下有文件 -> .\.cache-main 当前路径下有文件 -> .\.classpath 当前路径下有文件 -> .\.project 当前路径下有文件 -> .\.settings 当前路径下有文件 -> .\.worksheet 当前路径下有文件 -> .\bin 当前路径下有文件 -> .\src |
当前路径下的文件有以下内容,可见结果符合实际情况。
可以Scala逻辑型函数的定义还是比较简单的,要注意的一点就是,函数定以后,如果要调用就要放在Scala Object的main函数中,
因为main函数是Sclal Object的入口点,函数的运行都要从main开始。在从main函数调用定义的函数,这点看和C,C++和java都是相同的。
二异常处理
在scala中的异常处理和java应,也要对可能发生异常的代码进行 try,catch捕获异常和finaly最终处理异常。但和java不同的是,它是通过case匹配异常。
判断一个输入数是否是偶数,如果被2整除的余数不是0,就捕获异常。
def main(args: Array[String]): Unit = { val n = 99 try { val half = if (n % 2 == 0) n / 2 else throw new RuntimeException("N must be event") } catch { case e: Exception => println("The exception is:" + e.getMessage) } finally { } } |
运行代码,得到如下输出:因为99是奇数,当然会抛出抛出RuntimeException。
The exception is:N must be event |
DT大数据梦工厂的微信公众号是DT_Spark,每天都会有大数据实战视频发布,请您持续学习。 Scala 深入浅出实战经典(1-64讲)完整视频、PPT、代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2