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

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

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

Итак, как я могу сказать или читать "= > ", как в: -

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

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

Ответ 1

Обычно я говорю "такое", когда читаю этот оператор.

В вашем примере 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 равно London"

Насколько "идет" - это никогда не имело смысла для меня. 'p' никуда не денется.

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

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

x => x * 2;

будет читать

x отображает x раз 2.

Это кажется намного ближе к фактическому намерению кода, чем "становится" для этого случая.

Ответ 2

От MSDN:

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

Ответ 3

Код чтения по телефону

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

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

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

Для предиката (Customer c) = > c.Age > 21: "клиент видит, что см. возраст точки больше, чем двадцать один"

Ответ 4

Я всегда называл это "wang operator": -)

"p wang age p больше 16"

Ответ 5

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 9

Помимо приобретения предшествующей области (все переменные и константы, которые находятся в области для нормальной строки кода в точке, где происходит лямбда-выражение, доступны для кода выражения), лямбда-выражение является по существу синтаксическим сахаром для встроенная функция.

Список значений слева от оператора производства ( "= > " ) вносит вклад в структуру и содержимое фрейма стека, используемого для вызова этой функции. Вы можете сказать, что список значений вносит как декларации параметров, так и передаваемые аргументы; в более традиционном коде они определяют структуру и содержимое фрейма стека, используемого для вызова функции.

В результате значения "идут" в код выражения. Вы бы сказали: "Определяет фрейм стека для" или "идет" ?:)

В узко определенном применении булевых выражений, используемых в качестве условий фильтра (доминирующее использование лямбда-выражений, широко рассмотренных другими ответами на этот вопрос), очень разумно пропустить этот метод в пользу намерения кода, и это приводит к тому, что "для чего" является столь же кратким и больше говорит о значении кода.

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


Но почему "идет" ?

Поскольку "заполняет фрейм стека следующего кода", слишком много времени, чтобы продолжать говорить об этом. Я полагаю, вы могли бы сказать: "передано/передано".

Важное различие между явно переданными параметрами и захваченными переменными (если я правильно помню - исправьте меня, если я ошибаюсь), состоит в том, что первые передаются по ссылке, а последние - по значению.

Ответ 10

Я не думал об этом много, но я просто сугубо говорю "к". Он короткий и краткий, и подразумевает, что переменная передается в выражение. Полагаю, это можно было бы смутить цифрой 2 ( "два" ), но я склоняюсь к тому, чтобы говорить "больше" как "та". Никто (кто знает лямбды, по крайней мере) когда-либо говорил мне, что они считают это двусмысленным...

// "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"

Ответ 11

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

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


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

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

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


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

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

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

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

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

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


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

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

Ответ 12

Если вы представляете себе лямбда-выражение как анонимный метод, который он есть, "идет", он достаточно приличный.

(n => n == String.Empty)

n "переходит в" выражение n == String.Empty.

Он переходит к анонимному методу, поэтому вам не нужно обращаться к методу в коде!

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

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

Ответ 13

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

Ответ 14

В Ruby этот же sybmol называется "hashrocket", и я слышал, что программисты на С# тоже используют этот термин (даже если это неправильно).

Ответ 15

Мои два цента:

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

"Выражение Lambda с параметром s равно { return s.Age > 12 && s.Age < 20;}"

Мне это нравится, потому что это напоминает мне, где выражение lamdba происходит от

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

= > является просто ярлыком, поэтому вам не нужно использовать ключевое слово delegate и включать информацию о типе, поскольку он может быть выведен компилятором.