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, затем переменной у и, наконец, переменной х. Такой способ присваивания "по цепочке" удобен для задания общего значения целой группе переменных.
Составные операторы присваивания
В C# предусмотрены специальные составные операторы присваивания, упрощающие программирование некоторых операций присваивания. Обратимся сначала к простому примеру. Приведенный ниже оператор присваивания
X = X + 10;
можно переписать, используя следующий составной оператор присваивания.
X += 10;
Пара операторов += указывает компилятору на то, что переменной х должно быть присвоено ее первоначальное значение, увеличенное на 10.
Рассмотрим еще один пример. Оператор
х = х - 100;
и оператор
X -= 100;
выполняют одни и те же действия. Оба оператора присваивают переменной х ее первоначальное значение, уменьшенное на 100.
Для многих двоичных операций, т.е. операций, требующих наличия двух операндов, существуют отдельные составные операторы присваивания. Общая форма всех этих операторов имеет следующий вид:
имя_переменной ор = выражение
где ор — арифметический или логический оператор, применяемый вместе с оператором присваивания.
Ниже перечислены составные операторы присваивания для арифметических и логических операций.
+=
-=
*=
/=
%=
&=
|=
^=
Составные операторы присваивания записываются более кратко, чем их несоставные эквиваленты. Поэтому их иногда еще называют укороченными операторами присваивания.
У составных операторов присваивания имеются два главных преимущества. Во-первых, они более компактны, чем их "несокращенные" эквиваленты. И во-вторых, они дают более эффективный исполняемый код, поскольку левый операнд этих операторов вычисляется только один раз. Именно по этим причинам составные операторы присваивания чаще всего применяются в программах, профессионально написанных на С#.
Читать дальше