scala学習ノート(関数式プログラミング1)

5617 ワード

関数式プログラミング基础関数定义/宣言関数运行メカニズム再帰//难点[最短経路,邮便差问题,迷路问题,遡及]プロセス不活性関数と异常関数式プログラミング高级値関数(関数数面量)高次関数闭包応用関数コリー化関数,抽象制御...
関数戻り値の問題
  • scala関数は、関数体の最後の行コードから戻り値タイプを自動的に推定することができる(returnは省略可能)def fun (n1:Int):Int = n1
  • returnが省略されている場合、戻り値タイプはdef fun (n1:Int)=n1
  • を省略してもよい
  • 関数にreturnが明示的に使用されている場合は、戻り値のタイプを書く必要があります.書かない場合は、関数に戻り値がなく、返すしかありません(),
  • 関数が戻り値がないことを明確に宣言した場合、returnも戻り値もありません
  • 関数に戻り値がない、または戻り値タイプが不確定であることが明確である場合、戻り値タイプは省略(またはAnyと宣言)
  • scalaでは関数はネストをサポートし、関数のパラメータは関数であってもよいし、戻り値は関数
  • であってもよい.
    関数の宣言定義の問題
  • scala関数のパラメータは、宣言時に直接初期値を付与することができ、関数を呼び出す際に、実パラメータを指定しない場合はデフォルト値を使用し、実パラメータを指定すると、実パラメータは初期値
    def function0(num: Int = 100) = num
    println(function0(88)) //88
    println(function0()) //100
    
  • を上書きします.
  • 関数に複数のパラメータがある場合、パラメータがデフォルト値を上書きするかデフォルト値のないパラメータに渡すかは判断できません(デフォルトは左から右)、この場合は名前付きパラメータ
    fun("1",2)		//      
    
    def fun(num1: Int, num2: Int = 199, num3: Int) = {
          println(s"num1=${num1},num2=${num2},num3=${num3}")
    }
    
    fun(num1 = 1, num3 = 3)
    
  • を使用できます.
    さいきかんすうもんだい
    再帰関数は実行前に戻り値タイプを推定できません.使用時に明確な戻り値タイプが必要です.
    可変パラメータ
    scala関数は可変パラメータをサポートし、可変パラメータは最後に置かなければならず、1つしかありません.
    def fun(num1:Int,num2:Int*)=s"${num1},${num2.mkString}"
    println(fun(1,2,3,4,5,6))
    
    //1,23456
    

    プロセス
    関数の戻り値をUnitとする関数をプロシージャ(procedure)と呼び、明確な戻り値がなければ等号は省略できます
    関数を宣言するときに戻り値タイプがなく、等号がある場合、その関数は戻り値があり、プロシージャdef fun(num:Int)={}ではありません.
    ふかっせいかんすう
    関数の戻り値がlazyとして宣言されると、関数の実行は最初に値を取るまで延期されます.(リラクゼーション、遅延ロード)
    Lazyはvarタイプ変数を修飾できません
    変数を宣言するときにlazyが宣言された場合、変数の割り当て値も辞退します.lazy val res =sum(10,20)
    異常
    scalazでは、1つのcatchしかありません.catchには複数のcaseがあり、各caseは1つの異常に一致します.=>記号は、後でこの異常に対する処理であることを示します.
    try{
        //   
    }catch{
        case ex:Exception=>{
            //       
        }finally{
            //        
        }
    

    scalaでは、コンパイル期間異常はなく、異常は実行時に「すべての異常がthrowableのサブタイプthrow式にタイプがある」とキャプチャされます.
    scalaでは、throwsコメントを使用して例外@throws(classof[Exception])// NumberFormatException.classを宣言します.