[Java]ランダ食(Lambda)?


Lambda?


関数式プログラミング言語で使用される概念は、匿名関数の用語を指す.関数式プログラミングを容易にサポートするためにjava 8からLambda Expressionをサポートします.ラムダ式は(パラメータ)->実行コードとして記述される.

匿名関数とは?


関数名のない関数.匿名関数は、第1のクラスのオブジェクトの特徴を持つ1レベルのオブジェクトです.コンピュータプログラミング言語設計では、一級オブジェクトとは、他のすべてのオブジェクトの汎用演算をサポートするオブジェクトを指す.一般に、パラメータとしての伝達、修正、代入変数などの演算がサポートされる場合、一級オブジェクトと呼ばれる.
reference:wikipedia(一級オブジェクト)

メリットとデメリット


長所
  • コードを簡潔にすることができます.
  • コードは簡潔明瞭であり,式では開発者の意図を明確にし,可読性を向上させた.
  • 関数を一度に処理することで、時間を節約する
  • 並列処理可能
  • 短所
  • 匿名関数は再利用できません.
  • のデバッグは少し難しいです.
  • ランダを乱発するとコードが混乱します.
  • ラムダ式を呼び出す


    ラムダ式は関数型インタフェースを実現するオブジェクトである.関数インタフェースで宣言された抽象メソッドを実装する方法で記述されます.
    interface Func {
    	int calc(int a, int b); 
    }
    //추상메소드 calc() 한개만 가진 함수형 인터페이스 Func 이다. 
    ランダコール
    Func f = (int a, int b) -> { return a + b; }
    //OR
    Func f = (a, b) -> { return a + b; }

    Example

    interface Func{
    	int calc(int a, int b);
    }
    
    public class Example1 {
    	public static void main(String[] args){
        	Func add = (a,b) -> { return a+b;}
            Func minus = (a,b) -> a-b;
            
            System.out.println(add.calc(1,2));
            System.out.println(minus.cals(5,1));
        }
    }
    interface Func{
    	int calc(int a);
    }
    
    public class Example2 {
    	public static void main(String[] args){
        	Func multi = a -> a * a
            
            System.out.println(multi.calc(3));
        }
    }
    interface Func{
    	void print();
    }
    
    public class Example3 {
    	public static void main(String[] args){
        	Func f = () -> { System.out.println("Lambda Expression"); }
            
            f.print();
            
            f = () -> System.out.println("Another Lambda Expresssion"); 
            f.print(); 
        }
    }
    ラムダ式を方法とするパラメータ伝達
    interface Func{
    	int calc(int a, int b);
    }
    
    public class Example4 {
        public static void main(String[] args){
        	print(3,4, (a,b)->a+b); 
        }	
        
        public void print(int a, int b, Func f){
        	System.out.print(f.clac(a,b)); 
        }
    }

    @FunctionalInterface Annotation!


    @Functional Interface操作を使用すると、コンパイラに関数インタフェースの作成を通知できます.その利点は、コンパイラにインタフェースが抽象的な方法しかない関数インタフェースであるかどうかをチェックさせ、誤ったインタフェースの作成を防止することです.
    @FunctionalInterface
    interface Func{ // 컴파일 오류 발생
    	int calc(int a);
        void print(); 
    }
    reference👍