Лямбда-нотация и логические сравнения - PullRequest
0 голосов
/ 20 октября 2010

лямбда-нотация

x => x.MyProperty

легко путается некоторыми людьми с большим или равным. Т.е.

if (x => y) ...

вопрос: компилятор когда-нибудь путает их? То есть, следует ли принять соглашение, в соответствии с которым значение больше или равно всегда кодируется как:

if (x >= y) ...

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

Вопрос по SO

Флажки ASP.NET MVC2 в таблице

показало, что легко ошибиться.

EDIT:

В свете крошечного шторма, надвигающегося над этим, следующее может проясниться.

Я задал вопрос, потому что ответил на вопрос, где парень неправильно набрал лямбда-нотацию. Я указал на его опечатку, и он принял мой ответ. Есть ссылка на вопрос выше.

Тогда вопрос озадачил меня. Я всегда использовал> = без веской причины, но был убежден, что видел код, использующий другие обозначения. Иногда у вас есть предположения, что вы не думаете о допросе. Это может быть из моих дней VBA или нет, но остается убеждение, что я видел код, который компилируется, запускается и использует => для большего, чем сравнение. Быть по сему. Приношу свои извинения за то, что не "включил VS", но я работал весь день с Sitefinity в офисе без установки VS. Нет оправдания, я даю вам.

Но обратите внимание, что лямбда-выражения в C # такие же старые, как ... .NET 2? или это был .NET 3.5. Учитывая, что я использовал C # вкл и выкл с версии 1.0, вопрос не тот, но не такой абсурдный.

Я также думаю, что строгие правила SO велики в том, что они производят первичные вопросы и ответы. Но есть разные способы применения правил. Я использую SO всерьез с середины сентября, поэтому думаю, что лучше делать предупредительный выстрел по плохим вопросам, а не дергать коленную чашечку при первой же возможности. Вот что ТАК поощряет: оставлять комментарии, а не просто вызывать радостную оценку. Вы даете спрашивающему возможность осознать свою ошибку и удалить бессмысленный вопрос из системы. Поскольку после того, как ответы и голоса поступают, вопрос не может быть удален спрашивающим.

Конец разглагольствования.

Ответы [ 3 ]

15 голосов
/ 20 октября 2010

if (x => y) неверный код.

Операторы сравнения (x >= y и x <= y) должны иметь <> перед знаком =.

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

3 голосов
/ 20 октября 2010

Компилятор когда-нибудь путает их?

Нет. В C # (я смотрю на тег) >= всегда сравнение; => всегда лямбда-выражение. В C # .

есть оператор сравнения no =>.

Я думаю, компилятор может различать между двумя на основе контекста

Компилятору не нужен контекст, чтобы различать их; см. выше.

Т.е. следует ли принимать конвенцию в результате чего больше или равно всегда кодируется как:

if (x> = y) ...

Да, потому что это единственный способ, которым компилятор примет это. : -)

Что касается человеческой ошибки, я думаю, что помогают следующие мнемоники:

  • Мы почти всегда говорим «больше или равно», а не «равно или больше».
  • Математические символы помещают «больше» или «меньше чем» над линией, которая символизирует «или равно». Это может привести к порядку слева направо довольно естественно.
  • Символ, используемый для лямбда-выражения в C #, выглядит как стрелка, указывающая на выражение для возвращаемого значения. Это можно считать «урожайностью».
3 голосов
/ 20 октября 2010

=> является лямбда-оператором

терка или равно>> *

Я не думаю, что это может быть перепутано, потому что они не взаимозаменяемы

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