2016-11-10 1 views
1

В моей книге C# в нем говорится: «Оператор лямбды« = = »(читается как« идет »)».Почему не лямбда-функции не вносят подобные проблемы, как утверждения goto?

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

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

+1

«идет в«! = «Перейти». В вашем последнем абзаце объясняется, почему лямбды принимаются, а gotos - нет. «go to», вероятно, следует перевести как «преобразован в» или «результат», в то время как «goto» означает «забыть логику и порядок этой процедуры, breka, что бы эта программа не выполняла, и запустить эту строку кода СЕЙЧАС». –

+0

Выполнение не идет/прыгает в другую сторону, когда вы пишете лямбда. Вы просто определяете встроенную функцию, которая будет вызываться (и заканчивается) и указанная точка. _'Goes to'_ - это всего лишь один из способов __pronounicing__ оператора '=> 'но что это означает, что это действительно просто своего рода __assignment__! – TaW

+0

« идет к »?! Я никогда не коррелировал лямбда с« идет ». Это просто странно для меня. – itsme86

ответ

5

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

Инструкция GOTO дает разработчикам слишком большую свободу перемещения точки выполнения в произвольную точку кода. Он имеет тенденцию вводить ошибки, потому что разработчикам сложно отслеживать все возможные состояния, которые могут иметь различные переменные в любой момент времени, когда выполнение может произвольно перемещаться.

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

+0

Это должен быть комментарий, если вы не добавите ПОЧЕМУ они совершенно разные вещи. –

Смежные вопросы