Как произнести "=>", как используется в лямбда-выражениях в .Net - PullRequest
157 голосов
/ 08 ноября 2008

Я очень редко встречаю других программистов!

Моя мысль, когда я впервые увидел токен, была «подразумевает, что», поскольку это то, что он будет читать как математическое доказательство, но это явно не его смысл.

Итак, как мне сказать или прочитать "=>", как в: -

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

Или есть даже согласованный способ сказать это?

Ответы [ 15 ]

148 голосов
/ 08 ноября 2008

Я обычно говорю «такой, что» при чтении этого оператора.

В вашем примере p => p.Age> 16 читается как «P, так что p.Age больше 16».

На самом деле, я задал этот вопрос на официальных предварительных форумах linq, и Андерс Хейлсберг ответил, что

Я обычно читаю оператор => как «становится» или «для чего». Например,
Func f = x => x * 2;
Func test = c => c.City == "Лондон";
читается как «x становится x * 2» и «c, для которого c.City равен Лондону»

Что касается "идет" - это никогда не имело смысла для меня. «р» никуда не денется.

В случае чтения кода кому-то, скажем, по телефону, тогда, пока он знакомый программист C #, я бы просто использовал слово «лямбда», то есть «p lambda p dot age больше шестнадцати. "

В комментариях Стив Джессоп упомянул «преобразования в» в случае преобразований - так, взяв пример Андерса:

x => x * 2;

будет читать

x отображается в x раз 2.

Это кажется гораздо ближе к реальному замыслу кода, чем «становится» для этого случая.

56 голосов
/ 08 ноября 2008

С MSDN :

Все лямбда-выражения используют лямбду оператор =>, который читается как "идет к».

18 голосов
/ 08 ноября 2008

Чтение кода по телефону

От Эрика Липперта:

Лично я бы сказал, что c => c + 1 как "видеть, значит видеть плюс один". Некоторые варианты, которые я слышал:

Для прогноза (Customer c) => c.Name: "клиент видит, видит имя точки"

Для предиката (Клиент c) => c.Age> 21: «клиент видит так, что возраст точки больше двадцати одного» * ​​1011 *

15 голосов
/ 26 декабря 2008

Я всегда называл это «оператором ван»: -)

"p wang возраст p больше 16"

7 голосов
/ 08 ноября 2008

Я использую «идет», потому что книга LINQ сказала мне:)

7 голосов
/ 08 ноября 2008

Я видел, как люди говорили: "Стрела".

5 голосов
/ 25 января 2010

Как насчет "карт для"? Это одновременно лаконично и, возможно, более технически точно (т. Е. Нет предположения об изменении состояния, как в случае «идет» или «становится»), нет сопоставления множества с его характеристической функцией, как с «таким, что» или «для которого»), чем другие альтернативы. Хотя, если на странице MSDN уже есть стандарт, возможно, вам следует просто пойти на это (по крайней мере, для кода C #).

3 голосов
/ 25 января 2010

"Maps to" - мое предпочтительное произношение. Математически говоря, функция «отображает» свои аргументы на свое возвращаемое значение (можно даже назвать функцию «отображением»), поэтому мне имеет смысл использовать эту терминологию в программировании, особенно в качестве функционального программирования (особенно лямбда-исчисления) очень близко к математике. Он также более нейтрален, чем «становится», «уходит» и т. Д., Поскольку не предполагает изменения состояния, как уже упоминалось в контексте.

2 голосов
/ 29 апреля 2013

Если вы представляете лямбда-выражение в качестве анонимного метода, который он использует, «переход к» имеет достаточно приличный смысл.

(n => n == String.Empty)

n "идет" к выражению n == String.Empty.

Это относится к анонимному методу, поэтому вам не нужно идти к методу в коде!

Извините за это.

Честно говоря, я не люблю использовать "идет к" в моей голове, но я видел, как другие люди говорили, что это кажется странным, и я думал, что проясню это.

2 голосов
/ 08 ноября 2008

Мой краткий ответ: "c 'lambda-of' e". Хотя я цепляюсь за «лямбда-с» функцию «е», я думаю, что лямбда-о - это экуменический компромисс. Анализ следует.

Это отличный вопрос, если только для причудливых ответов. Большинство переводов имеют иные значения, чем для лямбда-выражений, что приводит к экзотическим интерпретациям. Как старый хакер с лямбда-выражениями, я просто игнорирую нотацию .NET и переписываю ее как лямбда в своей голове, желая, чтобы они сделали для этого почти все остальное.


Для передачи кода по телефону вы хотите, чтобы кто-то мог записать код по порядку. Это, конечно, проблема, но лямбда-стрелка или что-то, вероятно, лучшее, что вы можете получить, или, может быть, лямбда-в, но лямбда-в является наиболее точным.

Проблема в том, как использовать инфикс и как назвать все это и роль левой и правой частей в чем-то, что работает, когда говорят в инфикс-месте.

Это может быть чрезмерно ограниченной проблемой!


Я бы не использовал «такой, что», потому что это означает, что правая часть является предикатом, который должна удовлетворять левая часть. Это очень отличается от разговора о правой стороне, от которой левая сторона была выделена в качестве функционального параметра. (Заявление MSDN о «всех лямбда-выражениях» является просто оскорбительным и неточным.)

Что-то раздражает в "идет", хотя это может быть как можно ближе. «Идет к» подразумевает преобразование, но нет точно некоторой переменной с, которая идет к выражению в с. Абстракция к функции немного неуловима. Я мог бы привыкнуть к этому, но я все еще жажду чего-то, что подчеркивает абстракцию переменной.

Поскольку левая часть всегда является простым идентификатором в использованных до сих пор случаях [но дождитесь расширений, которые могут запутать это позже], я думаю, что для «c => expression» я бы прочитал «c 'lambda- функция 'выражение' 'или даже' c 'arg' 'функция' выражение '. В последнем случае я мог бы сказать такие вещи, как "b 'arg' c 'arg' 'function' expression".

Возможно, было бы лучше прояснить, что вводится лямбда-выражение, и сказать что-то вроде «arg» b »arg« c »function« expression ».

Выяснить, как перевести все это на другие языки, - это упражнение для студента [; <). </p>

Я все еще беспокоюсь о "(b, c) => expression" и других вариантах, которые могут возникнуть, если они этого еще не сделали. Возможно "args" b, c "function" expression ".


После всего этого размышления я замечаю, что я перехожу к переводу "c => e" как "lambda 'c' function 'e" и замечаю, что отображение на точную форму следует понимать по контексту: λc (e), c => e, f , где f (c) = e и т. д.

Я ожидаю, что объяснение "уходит" будет преобладать просто потому, что именно здесь доминирующее большинство впервые увидит лямбда-выражения. Какая жалость. Хорошим компромиссом может быть "c ' lambda-of ' e"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...