람다식 (Lambda Expression)

- A lambda expression is an anonymous (익명인) function

tha you can use to create delegates or expression tree types.


- 람다 연산자 : '=>'



- 귀차니즘(?)으로 인해 생겨났다는... 점잖게 얘기하자면 번거로움을 줄이기 위해 생겨났다는 람다식.

어떤 번거러움을 덜어주는 지에 대한 예제를 가져와봤다.


출처 : http://rintiantta.blog.me/40115460090


C#

static void Main(string[] args)

{

List<string> list = new List<string>()

{

"A", "B", "C", "D", "E", "F"

};


Console.WriteLine( (list.Where(data => data.Contains("A"))).Count() );    // 1

}


List 에는 Where 라는 메소드가 있고, 그 메소드는 조건에 맞는 녀석들을 뽑아서

다시 배열로 만들어 주는 메소드 입니다. 패러미터로 Func<string, bool> predicate 를 받는데

뜻은 string을 인자로 주면 bool 로 리턴한다는 뜻이랍니다. 


저렇게 람다식을 바로 안 넣고 패러미터를 string을 받고 bool로 리턴하는 메소드를 따로 만들어 

그 메소드를 predicate 로 넣어도 되지만 저렇게 간단한 메소드인 경우 

메소드를 따로 정의하기엔.. 코드도 길어지고 귀찮기도 하겠죠ㅎㅎ


static void Main(string[] args)

{

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

int oddNumbers = numbers.Count(n => n % 2 == 1); // Count 메소드도  위 Where 메소드와 비슷합니다


Console.WriteLine(oddNumbers); // 5, 1, 3, 9, 7

}




C# 람다식 문법

( 출처 : http://msdn.microsoft.com/ko-kr/library/bb397687.aspx )


 delegate int del(int i);

static void Main(string[] args)
{
    del myDelegate = x => x * x;
    int j = myDelegate(5); // j = 25
}



1. C# Expression Lambda :


(input parameters) => expression

왼쪽 괄호는 매개 변수가 1개일 경우, 생략가능



ex )


  x => x * x

(x, y) => x == y
(int x, string s) => s.Length > x
() => SomeMethod() : 입력 매개 변수가 0개 일 경우



2. C# Statement Lambda :


(input parameters) => {statement;}



ex )


delegate void TestDelegate(string s);

...

TestDelegate myDel = n => { string s = n + " " + "World"; Console.WriteLine(s);  };

myDel("Hello"); // Hello World




3. Asynchronous Lambda


4. 람다 식의 변수 범위


- 3, 4 번 관련 내용은 위 C# 람다식 관련 출처 링크를 통해 보는 게 나을듯.





Python 람다식 문법 

( 출처 : http://www.trypython.org/#part2-page4 ) : ctrl + c, v 가 안 되는 이 슬픔..


>>> def make_incrementor(n) :

return lambda x : x + n

...

>>> f = make_incrementor(42)

>>> f(0)

42

>>> f(1)

43




쌩뚱맞게 C# 이랑 Python 람다식 문법을 가져온 이유는..

람다식에 대한 내용을 Python 공부하다가 어쩌다 발견하게 되었고 예제 또한 이해가 잘 되서 가져왔다.

C# 의 경우 delegate(대리자) 과 관련되서 람다식이 나오는 것을 보고 가져와봤다.

대리자 관련 포스팅도 따로 할 예정.



by kelicia 2013. 12. 19. 16:57