Scala学习之For、Function、Lazy(4)
1.for的使用
for的使用在各种编程语言中是最常见的,这里只是聊聊for在Scala中的表现形式,由于Scala语言是完全面向对象的,所以直接导致for的不同呈现,下面举几个例子说明一下
object For {
def main(args:Array[String]):Unit={
for(i<-1 to 2;j<-1 to 2)
println("i is:"+i+" j is:"+j)
println("----------------------------------")
for(i<-1 to 2;j<-1 to 2 if i!=j)
println("i is:"+i+" j is:"+j)
}
}
该代码最后的输出结果为:
在这里解释一下” 1 to 2”,它的实质是”1.(2)”,即对象1调用数字2(意思是1到2),表现出了Scala完全面向对象编程,操作符”<-”是类似于C语言中的指针,意思是指向 。其次,从上面的例子,我们可以看出,在Scala中,for的呈现方式,优化了在C、C++、Java中的for循环嵌套,缩短了代码量。方便、简洁!
2.Function
function即函数,这里我们讲讲函数的声明方式。
object Function {
def main(args:Array[String]):Unit={
/*1.函数有名(可以不用声明函数的类型)*/
def addNum(x:Int)=x+10
println("在函数addNum中最后返回的值为:"+addNum(10))
/*2.函数匿名(可以不用声明函数的类型)*/
val add=(x:Int)=>x+20
println("在匿名函数中最后的返回值为:"+add(10))
/*3.递归算法(必须声明函数的类型)*/
def fac(n:Int):Int=if(n<=0)1 else n*fac(n-1)
println("当n=5时该递归算法的最后的结果为:"+fac(5))
/*4.初始化参数和参数覆盖*/
def combine(content:String,left:String="[",right:String="]")=left+content+right
println("当只有一个参数时:"+combine("I am xiaoming"))
println("当有两个参数时:"+combine("I am xiao ming","("))
println("当有三个参数时:"+combine("I am xiao ming","(",")"))
}
}
其输出结果为:
我在代码中都写了注释,但我还是得强调一下,在我们用递归函数算法时,由于在递归算法中是算法嵌套,Scala也不能识别其结果终究是什么类型,所以,我们在定义函数时,务必要带上我们需要的函数返回值类型
3.Lazy
lazy即懒值,Scala中通过lazy关键字来定义惰性变量,惰性变量只能是不可变变量。例如下面,只有在调用惰性变量b的toString方法的时候,才会去实例化b这个变量。可以看到“Test”是先打印出来的。
class Book(name:String){
println("new book"+name)
override def toString() = "《"+name+"》"
}
lazy val b = new Book("Java")
println("Test")
println(b.toString)
}
其输出结果为:
Test
new bookJava
《Java》