scala関数と方法

5207 ワード

関数とメソッドの違い
メソッド:オブジェクトに作用し、オブジェクトの動作defメソッド名(パラメータリスト):戻り値=メソッドボリューム関数:オブジェクトであり、FunctionN特質を実現したオブジェクトval関数名=(パラメータリスト)=>{関数ボディ}
定義#テイギ#
//def  
def fac(x:Int) = if(x>=0) x else ""
//fac: fac[](val x: Int) => Any

//val  
val fac = (x: Int) => if (x >= 0) x else ""
//fac: Int => Any = 

関数体に文が1つしかない場合は、カッコを省略できます.
val fac=(x:Int) => if(x>=0) x else ""
//fac: Int => Any = 

上記の戻り値タイプはすべて暗黙的(returnを使用しない前提で)であり、最後の値から戻り値タイプ(暗黙的変換)を導出し、可視関数とメソッドの戻りタイプは複数のタイプであってもよい
明示的なタイプ(def)
returnを使用する場合は、メソッドのみであり、メソッドの戻りタイプは1つのタイプのみであることを明示的に宣言する必要があります.
def fac(x:Int):Int = if(x>=0) return x else return -x

再帰:
def fac(n: Int): Int = if (n <= 0) 1 else n * fac(n - 1)
//fac: fac[](val n: Int) => Int

デフォルトパラメータ(def)
def combine(content:String, left: String = "[", right: String = "]") = left + content +right
combine("scala") //res0: String = [scala]
combine("scala","{") //res1: String = {scala]
combine("scala","{","}") //res2: String = {scala}

コードパラメータ(def)
def combine(content:String, left: String = "[", right: String = "]") = left + content +right
combine("scala", right="}") //res3: String = [scala}

可変パラメータ
def sum(args : Int*):Int = {
  if(args.length == 0 )
    0
  else
    args.head + sum(args.tail: _*)
}
sum(1) //1
sum(1,2) //3

プロセス
scalaは値を返さない方法に対して特殊な表現法がある.メソッドボディがカッコに含まれているが、前の=番号がない場合、戻りタイプはUnitです.このような方法をプロセスと呼ぶ
def draw(s: String) {
  println("-------")
  println("|" + "   " + "|")
  println("|" + s + "|")
  println("|" + "   " + "|")
  println("-------")
}

println(draw("123"))
/*
-------
|   |
|123|
|   |
-------
()
*/

バイアス関数
関数に複数のパラメータがあり、その関数を使用するときにすべてのパラメータを提供したくない場合、得られる関数はバイアス関数です.
def sum(a: Int, b: Int, c: Int) = a + b + c
val fp = sum(1, _: Int, 3) //fp     
println(fp(2))
println(fp(10))