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);
댓글 없음:
댓글 쓰기