×
Traktatov.net » C# 4.0: полное руководство » Читать онлайн
Страница 54 из 650 Настройки

Укороченные логические операторы иногда оказываются более эффективными, чем их обычные аналоги. Так зачем же нужны обычные логические операторы И и ИЛИ? Дело в том, что в некоторых случаях требуется вычислять оба операнда логической операции И либо ИЛИ из-за возникающих побочных эффектов. Рассмотрим следующий пример программы.


>// Продемонстрировать значение побочных эффектов.

>using System;

>class SideEffects {

>  static void Main() {

>    int i;

>    bool someCondition = false;


>    i = 0;

>    // Значение переменной i инкрементируется,

>    // несмотря на то, что оператор if не выполняется,

>    if(someCondition & (++i < 100))

>      Console.WriteLine("Не выводится");

>    Console.WriteLine("Оператор if выполняется: " + i); // выводится 1


>    // В данном случае значение переменной i не инкрементируется,

>    // поскольку инкремент в укороченном логическом операторе опускается,

>    if(someCondition && ( ++i < 100))

>      Console.WriteLine("Не выводится");

>    Console.WriteLine("Оператор if выполняется: " + i); // по-прежнему 1 !!

>  }

>}


Прежде всего обратим внимание на то, что переменная >someCondition типа >bool инициализируется значением >false. Далее проанализируем каждый оператор >if. Как следует из комментариев к данной программе, в первом операторе >if переменная i инкрементируется, несмотря на то что значение переменной >someCondition равно >false. Когда применяется логический оператор &, как это имеет место в первом операторе >if, выражение в правой части этого оператора вычисляется независимо от значения выражения в его левой части. А во втором операторе >if применяется укороченный логический оператор. В этом случае значение переменной i не инкрементируется, поскольку левый операнд (переменная >someCondition) имеет значение >false, следовательно, выражение в правой части данного оператора пропускается. Из этого следует вывод: если в коде предполагается вычисление правого операнда логической операции И либо ИЛИ, то необходимо пользоваться неукороченными формами логических операций, доступных в С#.

И последнее замечание: укороченный оператор И называется также условным логическим оператором И, а укороченный оператор ИЛИ — условным логическим оператором ИЛИ.


Оператор присваивания

Оператор присваивания обозначается одиночным знаком равенства (=). В C# оператор присваивания действует таким же образом, как и в других языках программирования. Ниже приведена его общая форма.


>имя_переменной = выражение


Здесь имя_переменной должно быть совместимо с типом выражения.

У оператора присваивания имеется одна интересная особенность, о которой вам будет полезно знать: он позволяет создавать цепочку операций присваивания. Рассмотрим, например, следующий фрагмент кода.


>int х, у, z;

>х = у = z = 100; // присвоить значение 100 переменным х, у и z


В приведенном выше фрагменте кода одно и то же значение 100 задается для переменных х, у и z с помощью единственного оператора присваивания. Это значение присваивается сначала переменной z, затем переменной у и, наконец, переменной х. Такой способ присваивания "по цепочке" удобен для задания общего значения целой группе переменных.