scala基础知识总结(三)方法的类型和应用,含范例代码

文章目录

    • 8、方法
      • 8.1 惰性方法
      • 8.2 方法参数
        • 8.2.1 默认参数
        • 8.2.2 带名参数
        • 8.2.3 可变长参数
      • 8.3 方法的调用方式
        • 8.3.1 后缀调用法
        • 8.3.2 中缀调用法
        • 8.3.3 花括号调用法
        • 8.3.4 无括号调用法
        • 扩展

8、方法

语法格式:

def 方法名(参数名:参数类型, 参数名:参数类型...):[return type] = {
	方法体  // 如果方法体只有一行代码,那么外面的大括号{}可以省略
}

一般情况下返回值的类型是可以省略不写让scala自己去判断的,
但是如果该方法是一个递归的方法,就必须要写返回值类型[return type]

示例1:求两个数的最大值

def getMax(a:Int, b:Int) = {
	return if(a >= b) a else b
}
val max = getMax(2, 5)

上面的方法简写

def getMax(a:Int, b:Int) = return if(a >= b) a else b

示例2:求n的阶乘

我们先试一下不写返回值类型的情况

def factorial(n:Int) = {
	return if(n == 1) 1 else n*factorial(n-1)
}
执行报错: error: method factorial has return statement; needs result type

修改一下

def factorial(n:Int):Int = {
	return if(n == 1) 1 else n*factorial(n-1)
}
val sum = factorial(5)  // sum = 120

8.1 惰性方法

当我们定义了一个有返回值的方法,接收返回值的变量被声明为lazy时,该方法不会被执行,直到变量首次被使用。

示例:

def getSum(a:Int, b:Int) = a + b
lazy val sum = getSum(2, 3)  // 此时方法不会被执行

print(sum)  // 在这里方法开始执行

8.2 方法参数

scala方法的参数主要分为三种类型

8.2.1 默认参数

方法中带有默认值的参数,这类参数我们在调用方法时可以不用传值,它会使用默认值进行赋值

示例:

def getSum(a:Int = 2, b:Int = 3) = a + b
val sum = getSum()  // 不需要传值
print(sum)

8.2.2 带名参数

我们在调用方法的时候,不指定参数名时默认按照参数的位置进行赋值,但是我们也可以通过指定参数名来进行赋值,必须要按照顺序

示例:

def getNumber(a:Int, b:Int) = {
	println(s"a=${a}\nb=${b}")
}
getNumber(b = 1, a = 2)

8.2.3 可变长参数

有时候在定义方法时,可能无法确定方法的参数个数,这时可以用不定长参数。它会将接收的参数组合成数组。

示例:

def getSum(numbers:Int*) = {
	print(numbers)
	numbers.sum  // 求和
}
val sum = getSum(1,2,3,4,5,6,7)
print(sum)

8.3 方法的调用方式

8.3.1 后缀调用法

“对象.方法()”的方式,是常用的调用方式

示例:

// abs是Math中求绝对值的方法
val a = Math.abs(-10)
print(a)

8.3.2 中缀调用法

“对象 方法 参数”的方式,在scala中比较特别的方法调用方式

常见的有:

1 to 10
1 + 1
....

注意:在scala中,±*/也是一个方法

示例:

val a = Math abs -10
print(a)

8.3.3 花括号调用法

“对象.方法{}”的方式,该方式值适用于只有一个参数的方法,{}内除了指定参数,还可以写其他的语句

示例:

val a = Math.abs{-10}
val b = Math.abs{
	println("正在调用该方法!")
	-10
}
print(a, b)

如果传入了多个参数,它会取最后一个

val b = Math.abs{
	println("正在调用该方法!")
	-10
	-20
}  // 结果b的值为20
		
val b = Math.abs{
	println("正在调用该方法!")
	-10
	"aa"
}  // 这个执行会报错,因为字符串不能求绝对值

应用场景:

可以对传入的值进行判断

val a = 10
val b = Math.abs{
	if(a >= 0){
		a+5  // 整数就加5,然后再求绝对值
	} else {
		a-5  // 负数就减5在求绝对值
	}
}

8.3.4 无括号调用法

如果方法没有参数,那么在调用的时候可以不用写()

示例:

def func1() = print("方法被调用!")
func1  // 正常执行

扩展

在定义方法时,如果方法的返回值是unit(没有返回值),那么方法参数列表后面的=可以省略不写

示例:

def func2(){print("方法被调用!")}
func2

你可能感兴趣的:(Scala)