2015년 3월 9일 월요일

뇌자극 C# 5.0 - 14강

-람다식-

14.1 처음 만드는 람다식

람다식은 익명 메소드를 만들기 위해 사용한다.
람다식으로 만드는 익명 메소드는 무명 함수라는 이름으로 부른다.

람다식 선언하는 형식

매개변수목록 => 식

=>는 입력 연산자 이다. 이 연산자의 역할은 그저 매개 변수를 전달하는 것 뿐이다.
람다식에서는 =>를 중심으로 왼편에는 매개변수가, 오른편에는 식이 위치한다.

예제)
//익명 메소드를 만들려면 델리게이트가 필요하다
delegate int Calculate(int a, int b);
...
...
static void Main(string[] atgs)
{
   Calculate calc = (int a, int b) => a + b; //익명 메소드를 람다식으로 만든 것
}

C#컴파일러는 위 코드를 한층 더 간결하게 만들 수 있도록 "형식유추"라는 기능을 제공한다.

static void Main(string[] atgs)
{
   Calculate calc = (a, b) => a + b; //익명 메소드를 람다식으로 만든 것
}

14.2 문 형식의 람다식

문 형식의 람다식은 => 연산자의 오른편에 식 대신 {와 }로 둘려싸인 코드블록이 위치한다.
형식은 다음과 같다.

(매개_변수_목록) => {
                           문장1;
                           문장2;
                           ....
                        }

문형식의 람다식에는 반환형식이 없는 무명함수를 만들 수 있다.

delegate void DoSomething();
//....
static void Main(string[] args)
{
   DoSomething DoIt = (  ) =>
          {
              Console.WriteLine("뭔가를");
              Console.WriteLine("출력해보자.");
              Console.WriteLine("이렇게!");
          }; //문장 형식의 람다식은 {}로 둘러싼다.
   DoIt();
}

14.3 Func와 Action으로 더 간편하게 무명 함수 만들기


익명 메소드와 무명 함수는 코드를 더 간결하게 만들어주는 요소다.
Func 델리게이트는 결과를 반환하는 메소드를 참조하기 위해
Action 델리게이트는 결과를 반환하지 않는 메소드를 참조한다.

Func 델리게이트의 형식 매개 변수 중 가장 마지막에 있는 것이 반환 형식이다.

예제 - 입력 매개 변수가 없는 버전)

Func<int> func1 = () => 10;  //입력 매개변수는 없으며, 무조건 10을 반환
Console.WriteLine(func1());  //10 출력

예제 - 입력 매개 변수가 하나 있는 버전)

Func<int, int> func2 = (x) => x*2;  //입력 매개변수는 int 형식 하나, 반환 형식도 int
Console.WriteLine(func2(3));  //6 출력

예제 - 입력 매개 변수가 두 개 있는 버전)

//입력 매개 변수는 int형식 둘, 반환 형식은 int
Func<int, int, int> func3 = (x, y) => x+y;  
Console.WriteLine(func3(2, 3));  //5 출력

Action 델리게이트

Action 델리게이트는 Func 델리게이트와 거의 같다.
차이점은 Action 델리게이트는 반환 형식이 없다는 것 뿐이다.

Action 델리게이트의 형식 매개 변수는 모두 입력 매개 변수를 위해 선언되어 있다.

예제-매개 변수가 아무 것도 없는 Action 사용)

Action act1 = () => Console.WriteLine("Action()");
act1(); 

예제 - 매개 변수가 하나뿐인 버전)

int result = 0;

//람다식 밖에서 선언한 result에 x*x의 결과를 저장
Action<int> act2 = (x) => result = x * x; 

act2(3);
Console.WriteLine("result : {0}", result); //9 를 출력

예제 - 매개 변수가 두 개인 Action<T1, T2> 델리게이트의 사용)

Action<double, double> act3 = (x,y) =>
{
   double pi = x/y;
   Console.WriteLine("Action<T1, T2>({0}, {1}) :{2}", x,y,pi);
};

act3 (22.0, 7.0);

댓글 없음:

댓글 쓰기