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

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

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

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

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

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

Ответы [ 15 ]

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

Я не особо задумывался об этом, но я просто лаконично говорю «кому». Это коротко и кратко, и подразумевает, что переменная передается в выражение. Я полагаю, что это может быть перепутано с цифрой 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"
2 голосов
/ 08 ноября 2008

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

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

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

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

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


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

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

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

1 голос
/ 01 октября 2013

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

1 голос
/ 08 ноября 2008

Отчасти проблема в том, что вы можете прочитать его вслух по-разному, в зависимости от его структуры. Жаль, что это не так красиво и не так интегрировано, как у рубина.

0 голосов
/ 08 июня 2015

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

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; };

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

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