문제

나는 다른 프로그래머를 거의 만나지 않습니다!

토큰을 처음 봤을 때 내 생각은 "그것을 암시한다"는 것이었습니다. 왜냐하면 그것은 수학적 증명에서와 같이 읽을 것이기 때문입니다. 그러나 그것은 분명히 그 의미가 아닙니다.

그러면 다음과 같이 "=>"를 어떻게 말하거나 읽습니까?

IEnumerable<Person> Adults = people.Where(p => p.Age > 16)

아니면 합의된 표현 방식이 있나요?

도움이 되었습니까?

해결책

나는 보통 그 연산자를 읽을 때 '그렇게'라고 말합니다.

예에서 p => p.age> 16은 "p로, p.age는 16보다 큽니다."

사실, 나는 공식 LINQ 프리 릴리스 포럼 에서이 질문을했고 Anders Hejlsberg는

나는 보통 => 연산자를 "bens"또는 "for whice"로 읽습니다. 예를 들어,
func f = x => x * 2;
func test = c => c.city == "런던";
"x가 x * 2가됩니다"와 "C.city가 런던과 같은 C"로 읽습니다.

'Goes to'까지 - 그것은 나에게 결코 의미가 없습니다. 'P'는 아무데도 가지 않습니다.

전화를 통해 누군가에게 코드를 읽는 경우, 동료 C# 프로그래머 인 한, 나는 단지 'lambda'라는 단어를 사용할 것입니다. 16 세. "

의견에서 Steve Jessop은 변화의 경우 '지도'에 대해 언급했습니다.

x => x * 2;

읽을 것입니다

X는 X 시간 2에 맵핑됩니다.

이 경우 코드의 실제 의도에 훨씬 더 가깝게 보입니다.

다른 팁

에서 MSDN:

모든 Lambda 표현식은 Lambda 연산자 =>를 사용하며 "GOES TO"로 읽습니다.

전화를 통해 코드를 읽습니다

Eric Lippert에서 :

나는 개인적으로 c => c+1이라고 말할 것입니다. 내가 들었던 몇 가지 변형 :

투영의 경우 (고객 C) => C.Name : "고객 참조가 도트 이름을 참조하게됩니다"

술어의 경우 (고객 C) => C.age> 21 : "고객은 도트 연령이 21보다 크다는 것을 참조하십시오"

나는 항상 그것을 "Wang Operator"라고 불렀다 :-)

"P Wang Age of P의 16 세 이상"

사람들이 "화살"이라고 말하는 것을 보았습니다.

LINQ 책이 나에게 말했기 때문에 "Goes to"를 사용합니다. :)

"지도"는 어떻습니까? 그것은 간결하고 더 기술적으로 더 정확합니다 (즉, "Goes to"또는 "Bens"와 같은 상태 변화에 대한 제안은 없으며, "또는"who "for"와 같은 특성 기능을 가진 세트의 충돌이 없음) 다른 대안. MSDN 페이지가 암시하는 것처럼 이미 표준이 있다면, 아마도 그와 함께 가야 할 것입니다 (적어도 C# 코드의 경우).

"지도"는 내가 선호하는 발음입니다. 수학적으로 말하면, 함수는 인수를 반환 값에 "맵핑"합니다 (함수를 "매핑"이라고 부를 수도 있습니다). 특히 기능적 프로그래밍 (특히 Lambda 미적분학)으로 프로그래밍 에이 용어를 사용하는 것이 합리적입니다. 수학에 매우 가깝습니다. 문맥이 언급 한 것처럼 상태의 변화를 암시하지 않기 때문에 "BENCE", "GOER TO"등보다 중립적입니다.

별로 생각해본 적은 없지만, 간단하게 "to"라고 말합니다.짧고 간결하며 변수가 전달됨을 의미합니다. 에게 표현식.숫자 2("two")와 혼동될 수도 있겠지만, 저는 말할 때 "to"를 "ta"처럼 발음하는 경향이 있습니다.(적어도 람다를 아는 ​​사람은) 누구도 그것이 모호하다고 생각한다고 말한 적이 없습니다...

// "Func f equals x to x times two"
Func f = x=> x * 2;

// "Func test equals c to c dot City equals London"
Func test = c => c.City == "London"

나의 짧은 대답 : "c 'lambda-of'e". 나는 " 'lambda'c 'function'e"에 집착하고 있지만 Lambda-of가 에큐메니칼 타협이라고 생각합니다. 분석은 다음과 같습니다.

기괴한 답변 만 있으면 큰 질문입니다. 번역의 대부분은 람다 표현 외에 다른 의미를 가지고있어 이국적인 해석으로 이어집니다. 오래된 Lambda-Expression 해커로서, 나는 .net 표기법을 무시하고 그들이 거의 다른 일을하기를 바랐지만 내 머리에 Lambda로 다시 작성합니다.


전화를 통해 코드를 해설하려면 누군가가 코드를 순서대로 쓸 수 있기를 원합니다. 물론 그것은 문제이지만, 람다 애슨 (Lambda-Arrow)이나 무언가는 아마도 당신이 얻을 수있는 최선의 일이거나 아마도 람다 인이지만 람다의 가장 정확합니다.

문제는 Infix 사용법과 왼쪽 및 오른쪽 부품의 모든 이름과 왼쪽 및 오른쪽 부품의 역할을 Infirix 장소에서 말할 때 작동하는 방법으로 이름을 지정하는 방법입니다.

이것은 과도한 구속 된 문제 일 수 있습니다!


나는 오른쪽이 왼쪽이 만족 해야하는 술어라는 것을 암시하기 때문에 "그러한"을 사용하지 않을 것입니다. 그것은 왼쪽이 기능적 매개 변수로 추상화 된 오른쪽에 대해 이야기하는 것과는 매우 다릅니다. ( "모든 람다 표현"에 대한 MSDN 진술은 단순히 불쾌하고 부정확합니다.)

우리가 얻을 수있는만큼 가까울 수는 있지만 "Goes to"에 대해 무언가가 순위입니다. "Goes to"는 변환을 암시하지만 C에서 표현식으로 이동하는 변수 C는 정확히 없습니다. 함수에 대한 추상화는 약간 애매합니다. 나는 이것에 익숙해 질 수 있지만, 여전히 변수의 추상화를 강조하는 무언가를 갈망합니다.

왼쪽은 지금까지 사용 된 경우에서 항상 간단한 식별자이기 때문에 [그러나 나중에 혼동 될 수있는 확장을 기다립니다], 나는 "c => expression"에 대해 생각합니다. " '또는"c'arg ''function 'expression ". 마지막 경우, 나는 "b 'arg'c 'arg' 'function'expression"과 같은 것을 말할 수있었습니다.

Lambda-Expression이 소개되고 " ''b 'arg'c 'function'expression"과 같은 것을 더 명확하게하는 것이 더 나을 수 있습니다.

이 모든 것을 다른 언어로 번역하는 방법을 알아내는 것은 학생을위한 운동입니다 [; <).

나는 여전히 "(b, c) => expression"과 그들이 아직 그렇지 않은 경우에 발생할 수있는 다른 변형에 대해 걱정합니다. 아마도 " 'args'b, c 'function'expression"일 것입니다.


이 모든 사고 후, 나는 "c => e"를 " 'lambda'c 'function'e"로 번역하고 정확한 형태로의 매핑이 문맥에 의해 이해되어야한다는 것을 알게된다는 것을 알았다 : λc (e. ), c => e, f 어디 f (c) = e 등

나는 지배적 인 대다수가 처음으로 Lambda 표현을 볼 수있는 곳이기 때문에 단순히 "로가는"설명이 우세 할 것으로 기대합니다. 그 유감. 좋은 타협은 "C '일 수 있습니다.람다'e "

람다 표현이 익명의 방법으로 상상한다면, "로 이동"은 충분히 의미가 있습니다.

(n => n == String.Empty)

n "으로 간다"표현 n == string.empty.

익명의 방법으로 이동하므로 코드의 메소드로 이동할 필요가 없습니다!

그 죄송합니다.

솔직히, 나는 내 머리 속에 "Goes to"를 사용하는 것을 좋아하지 않지만, 다른 사람들이 그것이 이상하게 보인다고 말하는 것을 보았고, 나는 그것을 분명히 생각했다.

앞의 범위를 획득하는 것 외에도 (Lambda 표현이 발생하는 지점에서 표현 코드에 이용할 수있는 지점에서 정상적인 코드 라인의 범위에있는 모든 변수 및 상수) Lambda 표현식은 본질적으로 인라인 함수에 대한 구문 설탕입니다.

생산 연산자 ( "=>")의 왼쪽 값 목록은이 기능을 호출하는 데 사용되는 스택 프레임의 구조와 내용에 기여합니다. 값 목록이 매개 변수 선언과 통과 된 인수를 모두 기여한다고 말할 수 있습니다. 보다 기존 코드에서는 이들이 함수를 호출하는 데 사용되는 스택 프레임의 구조와 내용을 결정합니다.

결과적으로 값은 표현식 코드 "로 이동"합니다. 오히려 "스택 프레임을 정의합니다"또는 "Goes to"라고 말 하시겠습니까? :)

필터 조건 (이 질문에 대한 다른 답변에 의해 광범위하게 고려 된 람다 표현식의 지배적 사용)으로 사용 된 부울 표현의 좁게 정의 된 적용에서 코드의 의도를 선호하는 방법을 건너 뛰는 것이 매우 합리적이며, 이는 " "간결하고 코드의 의미에 대해 더 많이 말하는 것.

그러나 Lambda 표현은 LINQ의 유일한 지방이 아니며이 맥락을 벗어난 것 외부에서 더 일반적인 형태는 사용되어야합니다.


그러나 왜 "간다"?

"다음 코드의 스택 프레임을 채우기 때문에"는 너무 길어서 계속 말하기에는 너무 길다. 나는 당신이 "IS/IS ARVER"라고 말할 수 있다고 생각합니다.

명시 적으로 통과 된 매개 변수와 캡처 된 변수 사이의 중요한 차이 (내가 틀린 경우 올바르게 기억한다면)는 전자가 참조로 전달되고 후자는 값으로 전달된다는 것입니다.

문제의 일부는 구조화 된 방법에 따라 크게 크게 읽을 수 있다는 것입니다. 부끄러운 일이 아닙니다. 그것은 Ruby 's만큼 예쁘지 않거나 통합되지 않았습니다.

루비에서는이 같은 sybmol이 "hashrocket"이라고 불리며, C# 프로그래머가 그 용어를 사용하는 것을 들었습니다.

내 두 센트 :

s => s.Age > 12 && s.Age < 20

"매개 변수 S가있는 람다 표현식은 { return s.Age > 12 && s.Age < 20; }"

나는 Lamdba 표현이 어디에서 왔는지 상기시키기 때문에 이것을 좋아합니다.

delegate(Student s) { return s.Age > 12 && s.Age < 20; };

=>은 단지 단순한 단백질이므로 Delegate 키워드를 사용할 필요가 없으며 컴파일러에서 추론 할 수 있으므로 유형 정보를 포함시킵니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top