Scala函数–声明,定义,调用和嵌套函数
函数是组合在一起以执行特定任务的一组语句。
该代码可以在逻辑上划分为单独的功能,其中每个功能都分配有特定的任务。
Scala中的函数是一个完整的对象,可以将其分配给变量,而Scala中的方法是具有名称,签名,字节码和注释的类的一部分。
函数名称可以包含++,+,-,–等字符。
可以在称为嵌套函数的函数内部定义函数,与Java不同,Scala支持该函数。
Scala函数声明
声明函数的语法是;
def functionName([arguments]) : return type
例如,
def multiply(a:Int ,b:Int): Int
def是define的简写形式,multiple是函数名。
a和b是Integer数据类型的乘法函数的参数,并且结果返回Integer数据类型。
函数定义
函数定义采用以下形式:
def functionName ([list of parameters]) : [return type] = { function body return [expr] }
def是定义函数的关键字,functionName是函数的名称,参数列表是用逗号分隔的变量,返回类型是返回值的数据类型。
函数主体包含逻辑和return关键字,可在函数返回值的情况下与表达式一起使用。
例如;
def multiply(a:Int,b:Int) : Int = { var c : Int = 0 c = a*b return c; }
乘法是具有两个变量a和b的函数的名称。
我们声明另一个整数数据类型的变量c,将a * b的结果存储在此变量中并返回计算出的变量c。
通过在Scala shell中键入multiply(50,20)
来运行程序,您将得到类似res0:Int = 1000
的输出。
一个不返回任何东西的函数可以返回Unit,它等于Java中的void。
不返回任何内容的函数在scala中称为过程。
def hello( ) : Unit = { println("Hello, World!") }
其中我们只是打印问候世界,因此返回数据类型为Unit。
输入" hello"运行程序,您将得到" Hello,World!"的输出。
让我们通过结合声明和定义来查看功能的完整示例,并通过创建对象来测试功能。
object mult { def main(args:Array[String]) { println("Multiplication result of two numbers is : "+multiply(20,21)); } def multiply( a:Int, b:Int ) : Int = { var c:Int = 0 c = a * b return c } }
行""def乘法(a:Int,b:Int):Int"是函数声明," var c:Int = 0,c = a * b
"构成函数体。
return c是函数的返回值。
这三个声明,定义和返回类型都构成一个完整的函数。
通过键入mult.main(null)运行上面的功能代码,并看到如下结果。
两个数字相乘的结果是:420
调用功能
在Scala中调用函数的方式是:
functionName( list of parameters )
例如,
multiply(4,3)
我们还可以创建一个实例并以以下形式调用该函数:
[instance.]functionName( list of parameters )
例如,
test.multiply(5,6)
考虑一个调用函数的例子;
object multest { def main(args: Array[String]) { println( "Result is : " + multiply(12,14) ); } def multiply( a:Int, b:Int ) : Int = { var c:Int = 0 c = a * b return c } }
我们正在创建一个对象multest,并定义一个方法乘法,该方法接受两个整数数据类型的变量a和b,然后执行a和b变量的乘法,将运算结果存储在变量c中。
我们正在编写main方法,并与参数一起调用函数multiple(12,14)。
通过在scala shell中键入" multest.main(null)"来运行上面的代码,并看到以下输出;
结果是:168
现在让我们看一个示例,该示例如何通过创建实例来调用函数。
class Multiplication { def multiply(a : Int , b: Int ) :Int = { var c : Int = 0 c = a * b return c } }
创建乘法类,并使用变量a和b定义乘法函数,并返回变量c,该变量存储传递的两个变量的相乘结果。
创建一个对象multest,并将方法Multiplication class的创建实例乘以调用方法;
object multest { def main(args:Array[String]) { var mul = new Multiplication() println( "Result is : " +mul.multiply(15,16)); } }
mul是Multiplication类的实例,该方法称为mul.multiply(15,16)。
输入multest.main(null)在shell中运行代码,产生以下输出。
结果是:240
嵌套函数
在另一个函数内部定义的函数称为嵌套函数。
Scala与Java的不同之处在于此功能,因为Java中不支持嵌套函数。
考虑一个嵌套函数的例子。
def min(x: Int, y: Int, z: Int) = { def min(i: Int, j: Int) = if (i < j) i else j min(x,min(y,z)) }
min方法接受Integer类型的三个参数x,y和z,然后再次定义min func,以首先找到两个数的最小值,然后使用找到的两个数的结果以及找到的最小值。
首先定义最少3个数字的函数,然后再定义最少2个数字,这些被称为嵌套函数。
通过将min函数调用为min(12,34,6)来运行上述代码,您将得到结果为res21:Int = 6。
嵌套函数不必具有相同的名称,它们也可以具有不同的名称。