📅  最后修改于: 2021-01-09 11:39:26             🧑  作者: Mango
Scala支持函数式编程方法。它提供了丰富的内置函数集,还允许您创建用户定义的函数。
在scala中,函数是一等值。您可以存储函数值,将函数作为参数传递,并将函数作为其他函数的值返回。您可以使用def关键字创建函数。必须提到的参数,返回类型,而函数的定义函数的返回类型是可选的。如果未指定函数的返回类型,则默认返回类型为Unit。
def functionName(parameters : typeofparameters) : returntypeoffunction = {
// statements to be executed
}
在上面的语法中,=(等于)运算符看起来很奇怪,但是不用担心scala将其定义为:
您可以创建带有或不带有=(等于)运算符的函数。如果使用它,函数将返回值。如果不使用它,您的函数将不会返回任何内容,并且会像子例程一样工作。
Scala函数不使用return语句。返回类型由编译器从函数存在的最后一个表达式或语句推断出来。
以下定义的函数也称为非参数化函数。
object MainObject {
def main(args: Array[String]) {
functionExample() // Calling function
}
def functionExample() { // Defining a function
println("This is a simple function")
}
}
输出:
This is a simple function
object MainObject {
def main(args: Array[String]) {
var result = functionExample() // Calling function
println(result)
}
def functionExample() = { // Defining a function
var a = 10
a
}
}
输出:
10
使用参数化函数,必须明确提及参数类型,否则编译器将引发错误,并且代码将无法编译。
object MainObject {
def main(args: Array[String]) = {
functionExample(10,20)
}
def functionExample(a:Int, b:Int) = {
var c = a+b
println(c)
}
}
输出:
30
在下面给出的程序中,我们使用递归函数将两个数字相乘。
在scala中,您还可以创建递归函数。使用递归函数要小心。必须有一个基本条件才能安全终止程序。
object MainObject {
def main(args: Array[String]) = {
var result = functionExample(15,2)
println(result)
}
def functionExample(a:Int, b:Int):Int = {
if(b == 0) // Base condition
0
else
a+functionExample(a,b-1)
}
}
输出:
30
Scala提供了为功能参数分配默认值的函数。在您在函数调用期间不传递值的情况下,它可以提供帮助。它使用参数的默认值。
让我们来看一个例子。
object MainObject {
def main(args: Array[String]) = {
var result1 = functionExample(15,2) // Calling with two values
var result2 = functionExample(15) // Calling with one value
var result3 = functionExample() // Calling without any value
println(result1+"\n"+result2+"\n"+result3)
}
def functionExample(a:Int = 0, b:Int = 0):Int = { // Parameters with default values as 0
a+b
}
}
输出:
17
15
0
在scala函数,可以在调用函数指定参数名称。在给定的示例中,您可以注意到在调用过程中传递了参数名称。您可以以任何顺序传递命名参数,也可以仅传递值。
让我们来看一个例子。
object MainObject {
def main(args: Array[String]) = {
var result1 = functionExample(a = 15, b = 2) // Parameters names are passed during call
var result2 = functionExample(b = 15, a = 2) // Parameters order have changed during call
var result3 = functionExample(15,2) // Only values are passed during call
println(result1+"\n"+result2+"\n"+result3)
}
def functionExample(a:Int, b:Int):Int = {
a+b
}
}
输出:
17
17
17