【scala】语法的省略
我们知道在语法方面,Java是冗长繁杂的,但是JAVA的可读性非常好。
而Scala的语法并不像JAVA那样冗长,但是又不失可读性。
而且Scala语法里有很多可以省略简化的地方。在这里我们记录一下常见的语法省略。
1. 变量声明中的省略
首先是我们可以省略数据类型,因为Scala有自动的类型判断机制。
对于变量的声明可以省略它的数据类型:
var myVar :String = “Scala” // 完整写法
var myVar = "Scala" // 省略的写法
但是要注意,当我们使用下划线“_”来给变量赋默认值的时候,不能省略返回值类型
var myVar : String = _ // 这里的String不能省略
2. 方法声明时的省略
其次对于方法也是可以省略它的返回值数据类型:
而且我们也可以省略掉return,方法会将最后一个计算结果当作返回结果返回
但是定义递归方法的时候,不能省略返回值类型
参考代码:
//1. 定义方法factorial, 用来计算某个数字的阶乘
def factorial(n:Int):Int = if(n == 1) 1 else n * factorial(n - 1)
//2. 调用方法, 获取5的阶乘.
val result = factorial(5)
//3. 将结果打印到控制台上.
println("result: " + result)
方法后的等于号也可以省略掉
但是括号内的参数的参数类型不能省略
//我们定义一个add方法,参数为两个Int类型,返回值为Int类型
def add(a:Int,b:Int) :Int = { return a+b } // 完整写法
def add(a:Int,b:Int) { a+b } // 省略写法
当我们方法块中的语句只有一行的时候,我们可以省略掉大括号。但此时,如果方法不止一行,是不可
以省略返回值类型的
def add(a:Int,b:Int) :Int = a+b // 省略大括号
但当我们方法块中的语句只有一行的时候,我们可以省略掉大括号的同时,省略掉返回值类型。
def add(a:Int,b:Int) = a+b //语句只有一行,同时省略大括号和等号
但是一定要注意,我们要么省略等于号,要么省略大括号。两者不能同时省略。
def add(a:Int,b:Int) a+b // 等号和大括号都没写,这样写是错误的!
3. 示例
class Counter{
private var value = 0;
def add():Unit = value+= 1
// def add() { value+=1 }
def current() { value }
//def current() :Int = value;
}
// 注意,scala中没有i++一说,只有i+=1.
4. 方法调用时的省略
当我们在调用无参方法的时候也可以省略掉后边的圆括号。
var myCounter = new Counter;
//省略掉了圆括号var myCounter = new Counter();此时调用的是Counter的无参构造=
myCounter.add();//没省略
println(myCounter.current);//省略了
注意,一定要是方法没有参数的时候,有参数的时候不能省略。
其次,定义无参数方法时,也可以省略后面的括号
def sayHello() = println("Hello, Scala!")
//可以改写为
def sayHello = println("Hello,Scala!")
转载自: link.
有部分修改