関数は、タスクを一緒に実行するステートメントのグループです。コードをさまざまな関数に分割できます。コードを異なる関数に分割する方法を決めるのはあなた次第ですが、論理的には、分割は通常、特定のタスクを実行する各関数に基づいています。
Scalaには関数とメソッドがあり、両者の意味上の違いはごくわずかです。Scalaメソッドはクラスの一部であり、関数は変数に割り当てることができるオブジェクトです。つまり、クラスで定義されている関数がメソッドです。
関数内(インライン関数)でも、どこでも関数を定義できます。さらに重要なことに、Scala関数名には、+、++、〜、&、-、– 、、 / 、:などの特殊文字を含めることができます。
関数宣言の形式:
def functionName([parameter list]):[return type]
Case:
オブジェクト関数{
DEFメイン(引数:配列[文字列]):単位 = {
のprintln(fun01(10))// の関数呼び出し
のprintln(fun02(10、20))// 関数呼び出し
// パラメータとして渡された関数をメソッド:
val res = method02(10 、fun02)
println(res)
}
// 関数定義:val / var function name =(function parameter list)=> function body
val fun01 =(a:Int)=> a + 10の
// 定義関数、パラメータのIntの2種類があり
ヴァルfun02 =(:INT、B:INT)=> {
IF(> 10 || B> 10)+ B そうでA - B
}
// 差分法と機能:
// 関数型プログラミング言語では、関数は「第一級オブジェクト」であり、それは他のデータ型と同様とすることができる
// 同じ操作と転送される
// 関数定義和
val fun_sum =(x:Int、y:Int)=> x + y
// 関数fのパラメーターの数は1、関数fのデータ型はInt、関数fの戻り値はInt
def method00(a: Int、f:Int => Int)= {
a + f(10 )
}
def method00(a:Int、b:Int、c:Int) = {
// 関数fを呼び出して10と5を合計した後、合計するパラメータの合計a
+ b + c
}
// 関数fのパラメータの数は2、関数fのパラメータのデータ型はInt、関数fの戻り値はInt
def method02(a:Int、f:(Int 、Int)=> Int)= {
// 関数fを呼び出して10と5を合計した後、パラメーターを合計しますa
var x = 10
var y = 5
val fvalues = f(x、y)// 関数を呼び出して10と5
a + fvaluesの合計を求めます
}
}
/**
* 方法的声明和使用
*/
object Method {
def main(args: Array[String]) {
//调用:method01()或者method01
// method01
// method03
println(method05("method05", 20))
}
/**
* 使用def定义一个方法
* 方法的定义:def 方法名(参数列表):返回值={方法体}
*/
//def method07= 10
def method01(): Unit = println("this is my first method")
/**
* 如果没有参数、可以直接不用写()
*/
def method02 = println("this is my first method")
/**
* 如果没有参数、不确定返回值数据类型时
*/
def method03 = {
println("this is my first method")
}
/**
* 指定方法的返回数据类型,方法的最后一个表达式作为方法的返回值
*/
def method04: String = {
"this is my first method"
}
/**
* 当方法需要传入参数是时:
*
* @return
*/
def method05(str: String, age: Int): String = {
//把参数传入字符串里
s"$str method,and age=$age"
}
}
// 方法的参数列表 常用的参数有默认参数,带名参数和可变参数
object MethodArgment {
def main(args: Array[String]) {
//调用默认参数:
method01("xingyue", 20, "nan")
// 或者
method01("qingyuan",22 )
println("-----------------------------")
//正常传递参数,根据参数列表顺序传递
method02("laozhang", 40)
//scala的带名参数:
method02(age = 40, name = "laozhang")
println("----------可变参数-------------------")
method03(10, 20, 30, 40, 100, 1000)
}
/**
* 默认参数
* //我们在调用方法的时候,在某些情况下,没给参数,这个时候,
* 方法会使用默认的一个参数,但是这个参数从哪里来?? 我在定义方法的时候就给了这个默认参数
* //当我们给的参数不够的时候,会自动的依次补齐默认参数
*
* @param name
* @param age
* @param sex
*/
def method01(name: String, age: Int, sex: String = "nan"): Unit = {
val info = s"your name is $name,and age is $age,and sex is $sex"
println(info)
}
/**
* 带名参数:在调用函数的时候,我们不按照函数的定义参数列表来传递参数,
* 使用的是带名参数的方式来传递
*
* @param name
* @param age
*/
def method02(name: String, age: Int): Unit = {
val info = s"your name is $name,and age is $age"
println(info)
}
/**
* 可变参数:在定义函数时,可能无法确认出到底有多少个参数,可以用变长参数的形式来定义函数
*
* @param argInt
*/
def method03(argInt: Int*): Unit = {
//变量可变参数遍历方式1
for (arg <- argInt.iterator)
println(arg)
//变量可变参数遍历方式2
for (arg <- argInt)
println(arg)
}
def method04(age: Int, str: String*): Unit = {
//变量可变参数遍历方式1
for (arg <- str.iterator)
println(age + ":" + arg)
//变量可变参数遍历方式2
for (st <- str)
println(age + ":" + st)
}
}