글
람다식 (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(대리자) 과 관련되서 람다식이 나오는 것을 보고 가져와봤다.
대리자 관련 포스팅도 따로 할 예정.
'Programming' 카테고리의 다른 글
자료구조 : Linked List (0) | 2014.04.25 |
---|---|
Delegate (대리자) (1) | 2013.12.20 |
PHP vs. Ruby vs. Python (0) | 2013.12.19 |
HTML5 Canvas Element 를 사용할 때 주의할점 - drawImage() 관련 (2) | 2013.01.11 |
jQuery : css() 그리고 jQuery UI 소개 (0) | 2013.01.02 |
RECENT COMMENT