本期内容:
1:For循环的进阶实战,(更多的实战代码)
2:Function进阶实战,(Function更多的定义和实现方式)
3:Lazy的使用,(延迟加载)
For循环常用:
for(i <- 1 to 2; j <- 1 to 2 if i!=j){
println((100*i+j)+" ")
}
Function函数:
注意:(特别重要)
1:scala中的函数是一定有值返回的,但可以在声明时不明确指定函数的返回值,代码块中的最后一个参数作为scala函数的返回值。
2:scala因为函数是有返值,所以,函数可以作为函数的参数去传递。
函数定义方式0:没有返回值的函数
def sum(x:Int){
val s=x+100
println(s) //println方法它的返回值Unit作为sum函数的返回值
}
函数定义方式1:声明没有明确指定返回类型的函数
def sum(x:Int)={
val s=x+100
}
//解析以上代码:用def关键字定义了一个名为sum的函数,这个函数有一个入参x,它的类型是Int,由与scala可以自动进行类型推到,这个函数没有明确指定它的返回值类型,={}这个代码块会进行自动的类型推到。
函数定义方式2:声明指定返回类型的函数
def sumAll(x:Int,y:Int):Int={
val s=x+y
s
}
//解析以上代码:这个函数指定了返回的类型,:Int={},指定了返回的类型为Int
函数定义方式3:匿名函数,没有名字的函数(特别重要)
val add = (x:Int) => x+100
//解析以上代码:左侧 val add 它是一个不可变变量,右侧(x:Int) => x+100它是一个匿名函数,右侧函数计算的结果赋值给左侧add这个变量。
println("结果是:"+add(50)) //调用打印结果为150
函数定义之递归方式:函数必须要有返回值
def fac(n: Int): Int = if (n <= 0) 1 else n * fac(n - 1)
//解析以上代码:fac这个函数必须要有返回值:Int,如果没有返回值,编译会失败并报错
函数的参数是可变的:也就是说函数的参数有很多个,如下代码(args: Int*和args: String*)表示可以传递多个参数
Demo1:
def content(args: Int*) = {
var result = 0;
for (sum <- args) {
result += sum
}
result
}
val sum = content(1, 2, 3, 4, 5, 6)
println("结果是:" + sum)
Demo2:
def lianjie(args: String*) = {
var result = "Hello:"
for (i <- args) {
result += i + ","
}
result
}
val str = lianjie("Spark", "Hadoop");
println("结果是:" + str)
结果是:Hello:Spark,Hadoop,
Lazy的使用:当一个变量或常量加了lazy关键字修饰时,表示只有在第一次被使用时,才会被实例化
lazy val file = Source.fromFile("D:\hadssss.text") //此文件其实不存在,如果加了lazy关键字,不会出错。
println("scala")
//for (line <- file.getLines()) {
//println(line)
//}