Почему операторы короткого замыкания не используются по умолчанию - PullRequest
2 голосов
/ 05 февраля 2012

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

IE:

 if (Method1() & Method2()) {
 }

 if Method1 And Method2 then
 End if

 if (Method1() | Method2()) {
 }

 if Method1 Or Method2 then
 End if

На самом деле (по умолчанию) означает

 if (Method1() && Method2()) {
 }

 if Method1 AndAlso Method2 then
 End if

 if (Method1() || Method2()) {
 }

 if Method1 OrElse Method2 then
 End if

1 Ответ

0 голосов
/ 05 февраля 2012

Ну, есть две разные причины и два разных ответа.

Для C # (и большинства родственных более старых языков) один амперсанд или отдельный канал фактически выполняет побитовые операции с переменными (побитовые, а не логические). Вот почему во всем коде C / C ++, когда кто-то хочет логический и , вы увидите двойной амперсанд в их коде.

Для VB.NET Я верю, что ответ - просто история. Устаревшие базовые языки всегда использовали «и» и «или» для выполнения операций без короткого замыкания. Это было очень плохое решение, но оно было доведено до VB.NET.

Следует отметить, что все базовые языки используют ключевые слова "и / или" для выполнения побитовых операций. В более ранних основах не было эквивалентного сочетания ключевых слов AndAlso или OrElse для принудительного короткого замыкания, поэтому вам пришлось вкладывать операторы If, чтобы получить логический эквивалентный эквивалент короткого замыкания и.

...