1、方法的定义和使用
def max[函数名](x[参数]:Int[类型],y[参数]:Int[类型]):Int[函数返回值类型]={
if(x>y)
x
else
y
//大括号内的叫做方法体
//方法体内的最后一行为返回值,不需要使用return
}
main{
println(three)//没有入参的函数,调用时括号是可以省略的
}
def three()=1+2
def sayHello():Unit={
//Unit表示没有返回值
}
2、默认参数的使用
在函数定义时:允许指定参数的默认值
main{
sayName() //AB
sayName("rouze") //rouze
}
def sayName(name:String="AB"):Unit={
println(name)
}
3、命名参数的使用
main{
speed(100,10) //10.0
speed(distance=100,time=10) //10.0
speed(time=10,distance=100) //10.0
}
def speed(distance:Float,time:Float):Float={
distance/time
}
4、可变参数的使用
main{
sum(1+3) //4
sum(1+3+3) //7
}
/* 与可变参数冲突,会报错
def sum(a:int,b:int)={
a+b
}
def sum(a:int,b:int,c:int)={
a+b+c
}
*/
def sum(number:Int*)={
var result = 0
for(number <- numbers){
result+=number
}
result
}
java中
public static void func(String... a)
5、条件表达式
val x =1
if(x>0) true else false
val a = if(x>0) true else false //a=true
Any:包含AnyVal和AnyRef,相当于Object
AnyVal:包含Scala所有类型
AnyRef:scala classes 与 java classes
scala>val x = 2
scala>val m = if(x>=2) 1
m:AnyVal = 1
6、循环表达式
to,Range,until
to :
1 to 10 //同 1.to(10)
scala.coolection.immutable.Range.Inclusive = Range(1,2,3,4,5,6,7,8,9,10) //左闭右闭
Range(1,10)
scala.coolection.immutable.Range = Range(1,2,3,4,5,6,7,8,9) //左闭右开
Range(1,10,4[步长]) //Range(1,5,9)
Range(1,10,-1) //Range(10,9,8,7,6,5,4,3,2)
1 until 10
scala.collection.ummutable.Range = Range(1,2,3,4,5,6,7,8,9) //左闭右开
for(i <- 1 to 10 if i%2 ==0){
println(i)
}
//=> 就是将左边的course作用上一个函数,编程另外一个结果
//println 就是作用到course上的一个函数
val courses = Array("hadoop","spark")
courses.foreach(course => println(course)
while:
var (num,sum)= (100,0)
while(num>0){
sum = sum+num
num=num-1
}
println(sum)
yield: 生成一个新的集合关键字
val r = for(i <- 1 to 10) yield i*10
scala.collection.immutable.IndexedSeq[Int] = Vector(10,20,30,40,50,60,70,80,90,100)
val a1 = for(i <- 1 to 10; if(i%2 == 0)) yield i
scala.collection.immutable.IndexedSeq[Int] = Vector(2,4,6,8,10)