람다 표현식을 설명할 수 있나요?[복제하다]
-
06-07-2019 - |
문제
나는 정말로 그렇지 않다 얻다 람다 표현식.ALGOL 시절부터 존재해 왔지만 Python과 Ruby가 인기를 끌었던 꽤 최근까지는 이에 대해 들어보지 못했습니다.이제 C#에는 =>
구문, 내 세계(.NET)의 사람들은 lamdba 식에 대해 점점 더 많이 이야기하고 있습니다.
나는 람다 미적분학에 관한 Wikipedia 기사를 읽었지만 실제로 수학 전문가는 아닙니다.실무적인 측면에서는 잘 이해가 되지 않습니다.람다 표현식은 언제 사용합니까?왜?그것이 내가 해야 할 일인지 어떻게 알 수 있나요?
람다 식 문제를 해결하기 전과 후의 형식으로 어떻게 해결할 수 있는지 예를 보여줄 수 있나요?어떤 명령형 언어라도 괜찮지만 C#이 이해하기 가장 쉽습니다.
해결책
기본적으로 C#에 관한 한 Lambda Expressions는 대의원 (또는 표현 트리를 만들기 쉬운 방법입니다.
C# 1에서는 일반 방법에서 대의원 인스턴스 만 만들 수있었습니다. C# 2에서 우리는 익명의 방법을 얻었습니다. C# 3에서 우리는 더 간결한 익명 방법과 같은 Lambda 표현을 얻었습니다.
그들은 하나의 값을 취하고 값을 반환하는 논리를 표현하고 싶을 때 특히 간결합니다. 예를 들어 LINQ의 맥락에서 :
// Only include children - a predicate
var query = dataSource.Where(person => person.Age < 18)
// Transform to sequence of names - a projection
.Select(person => person.Name);
다른 측면과 함께 이것에 대한 자세한 토론이 있습니다. 폐쇄에 관한 내 기사.
다른 팁
답변 이 질문 당신에게 유용 할 수 있습니다.
람다 함수는 익명 함수일 뿐입니다.
예를 들어, Python에서는 목록의 모든 요소를 두 배로 늘리고 싶습니다.그렇게 하는 방법에는 거의 세 가지가 있습니다.
목록 표현식:
[2*x for x in list]
명시적 기능:
def double(x):
return 2*x
map(double, list) # iirc
람다 사용:
double = lambda x : 2*x
map(double, list)
따라서 대부분의 언어에서 람다는 새로운 함수를 생성하는 데 따른 구문상의 오버헤드를 피하기 위한 방법일 뿐입니다.
이것은 C#에서 Lambda Expressions를 사용하는 데 큰 아이디어를 이해하는 방법에 대해 본 더 나은 설명 중 하나입니다.
http://www.developingfor.net/c-30/upgrade-your-c-skills-part-3 lambda-expressions.html
.NET에서 Lambda 표현식의 주된 사용은 목록으로 작업 할 때였습니다. Lambda 표현식을 사용하면 데이터베이스 테이블을 검색하기 위해 SQL 문을 작성하는 것과 비슷한 방식으로 목록에 쿼리를 구축 할 수 있습니다.
람다 표현식은 기능적 값입니다 ( 'int'와 'string'이 값인 것과 같은 의미에서). 이것은 가능하다는 것을 의미합니다
- Lambda 표현식을 보유하는 변수 정의 (이것은 함수 정의와 동일합니다).
- 방법이나 함수에서 람다 표현식을 반환하십시오
- 함수 또는 방법에 대한 인수로 Lambda 표현을 보내십시오.
지도, 필터 또는 접기 (모든 기능 언어로)와 같은 기능을 살펴보고 Lambda 표현식이 다른 기능에 대한 인수로 어떻게 사용되는지 확인하십시오.