官网教程:http://docs.scala-lang.org/tour/basics.html
*********官网还是非常人性化的,可以直接运行调试代码。********************
val,是value的简称,表示一个数值,可以定义类型,但是不能修改。val x:Int = 2
var,是variables的简称,表示一个变量,也是可以定义类型,也可以修改。
代码块:block。我们将很多表达式用{}包括起来,叫块。代码块返回的值就是最后一个表达式的返回值。
println{
val x =1+1
x+1
}//3
这里返回的就是最后一个表达式的值,并不是返回的x的值。
函数(function)
1,定义一个没有名称的函数。
(x:Int)=>x+1
解释:前面括号里面的是这个函数的参数,=>号后面的是表达式.
疑问:怎么调用这种没有名称的函数?作用是不是像python 中的lambda函数.
2,定义一个有名称的函数。格式:函数返回值类型 = 函数名(参数:参数类型)=>表达式
val addOne = (x:Int)=> x+1
测试1:如果此时输入的x不是整数,比如输入一个小数,那么会报错:
ScalaFiddle.scala:2: error: type mismatch;
found : scala.this.Double(1.3)
required: scala.this.Int
println(addOne(1.3))
测试2 如果我们定义函数返回是Int 实际运算出的是小数,会怎么样?直接报错
测试2 如果函数返回定义的是var ,测试可以。
同时函数也可以多参数,没有参数。
下面将要讲scala的方法。关键字是def,在python 中这个关键字是定义函数的,也可以说是方法,我们将要看看这两者的区别。
同时函数也可以多参数,没有参数。
val add = (x:Int,y:Int) => x+y
val print = () => 23
这个函数是不能写成python或者javad的函数定义形式,比如上面的,写成这个格式就报错:val add(x:Int,y:Int)=>x+y
1,方法的形式是跟函数有区别的,方法的形式一把是,关键字def,方法名称,参数列表,返回值类型和主体。下面是一个定义两个数相加的方法。
def add(x:Int,y:Int):Int =x+y
注意,返回值类型是在参数列表后,冒号后定义的。
2,方法的参数可以跟多个参数列表
def add(x:Int,y:Int)(m:Int,n:Int):Int =(x+y)*(m+n)
这里没看出有啥优势,写在一个里面不好?
3,无参数的情况
def name:String = System.getProperty("user.name")
println("Hello,"+name+"!")
后面的class就不写了。
附录一张Scala的数据类型