Відповіді:
Мене трохи збентежила документація MSDN C #, в якій сказано, що
&
і|
логічні оператори, і це,&&
і||
є умовними операторами. Я продовжую виклику&&
,||
і!
логічні оператори, так що я не маю рації?
Немає; ти прав.
У документації MSDN є численні невеликі, переважно неважливі номенклатурні помилки; Я намагався вивести їх якомога більше, але міг, але у випадках, коли це не є абсолютно невірним та оманливим, це не завжди розумне використання часу. Перейдіть до специфікації, якщо ви хочете остаточне твердження про назву функції C #.
Отже: відповідним органом є специфікація C #, яка вказана в розділі 7.11:
&
,^
І|
оператори називаються логічні оператори.
Потім він продовжує розбивати вбудовані логічні оператори на цілі, перелічувальні, булеві та нульові-булеві логічні оператори. Існують також визначені користувачем логічні оператори; докладні відомості див.
У розділі 7.12 маємо
Ці
&&
та||
оператори називаються умовні логічні оператори. Їх також називають логічними операторами «короткого замикання».
Тож усі вони є логічними операторами. Деякі з них є умовними логічними операторами .
Те , що робить умовні логічні оператори умовної ? Можна гарно здогадатися, що це тому, що вони зазвичай використовуються в умовних операторах ( if
) або умовних виразах ( ? :
). Справжня причина задана специфікацією:
Оператори
&&
та||
оператори є умовними версіями операторів&
та|
операторів: Операціяx && y
відповідає операціїx & y
, за винятком того, щоy
вона оцінюється лише у тому випадку, якщоx
вона не відповідає хибності. Операціяx || y
відповідає операціїx | y
, за винятком того, щоy
оцінюється лише в тому випадку, якщоx
це неправда.
Отже, умовні логічні оператори називаються тим, що операнд правої руки оцінюється умовно залежно від значення операнда лівої руки.
Ми можемо бачити це яскравіше, зазначивши, що умовні логічні оператори є лише «синтаксичними цукрами» для умовних виразів . x && y
це просто більш приємний спосіб писати x ? y : false
, і x || y
це просто більш приємний спосіб писати x ? true : y
. Умовні логічні вирази - це насправді умовні вирази.
Існує також визначена користувачем форма умовного логічного оператора, і це трохи хитро. Деталі див. У специфікації.
Подальше читання, якщо ця тема вас цікавить:
У C # - це всі логічні оператори.
int x = 0xABCD & 0xFF // x == 0xCD
&&
і ||
називаються " умовними логічними операторами", оскільки вони мають коротке замикання.
bool someOtherCondition = true;
if (x == 0xEF && someOtherCondition) // someOtherCondition is not evaluated,
// because x == 0xEF is false
Зауважте, що ця термінологія відрізняється від мови до мови. В C і C ++ &&
і ||
просто логічні оператори. У Java &
і |
називаються операторами побітових операцій , тоді як C і C ++ класифікує їх як арифметичні оператори .
Справа в тому , що &
і |
є побітовим оператори, тобто вони застосовуються до і виходу бітового значення рядка. І побіт - це дуже вживаний термін серед програмістів.
Наприклад 0xff & 0x00 == 0x00
, поки 0xff | 0x00 == 0xff
.
І , &&
і ||
застосовуються до умов, і дають звичайні значення умов; тобто true
і false
.
Наприклад true && false == false
, поки true || false == true
.
Тому &&
і ||
можна було б назвати умовними операторами, незважаючи на те, що не є звичайним терміном серед програмістів.
Звичайно, це знає кожен програміст C, C ++, Java та C #. Але я здогадуюсь, що трактується неправильно, тому що "умовний оператор" не є терміном, який часто використовуються нами програмістами.
|
взаємозамінні||
, хоча в багатьох випадках вони можуть бути замінені без явної зміни поведінки програми.