Scalaの関数とメソッド

関数は、タスクを一緒に実行するステートメントのグループです。コードをさまざまな関数に分割できます。コードを異なる関数に分割する方法を決めるのはあなた次第ですが、論理的には、分割は通常、特定のタスクを実行する各関数に基づいています。

Scalaには関数とメソッドがあり、両者の意味上の違いはごくわずかです。Scalaメソッドはクラスの一部であり、関数は変数に割り当てることができるオブジェクトです。つまり、クラスで定義されている関数がメソッドです。

関数内(インライン関数)でも、どこでも関数を定義できます。さらに重要なことに、Scala関数名には、+、++、〜、&、-、– 、、 / 、:などの特殊文字を含めることができます。

関数宣言の形式:
def functionName([parameter list]):[return type]
Case:

オブジェクト関数{ 
 
  DEFメイン(引数:配列[文字列]):単位 = { 
    のprintln(fun01(10))// の関数呼び出し 
    のprintln(fun02(1020))// 関数呼び出し
 
    // パラメータとして渡された関数をメソッド: 
    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)
 
  }
 
}

 

おすすめ

転載: www.cnblogs.com/itboys/p/12750989.html