Підрозділ 2.8
Операції присвоєння
Пояснює просте та складене присвоєння, скорочені оператори на кшталт +=, -=, *= і порядок виконання таких виразів.
2.8. Операції присвоєння
Операція присвоєння — одна з найфундаментальніших операцій у програмуванні. Вона записує значення у змінну, задаючи або оновлюючи її стан. В операції присвоєння беруть участь два операнди: лівий (змінна, якій присвоюється значення) і правий (вираз, значення якого присвоюється). Лівий операнд завжди повинен бути іменованим виразом, що допускає модифікацію, — зазвичай це змінна або елемент масиву. Звичайний літерал або константа лівим операндом бути не може.

Базове присвоєння `=`
Найпростіша операція присвоєння — =. Вона обчислює вираз праворуч і записує результат у змінну ліворуч:
Операція присвоєння має низький пріоритет: спочатку повністю обчислюється вираз правого операнда, і лише потім результат записується у змінну. Це дозволяє без будь-яких проблем писати a = b * 5 + 2 — множення і додавання виконаються першими.
Множинне присвоєння
C# дозволяє присвоювати одне і те саме значення кільком змінним в одному виразі. Для цього операції присвоєння ставляться підряд. Оскільки присвоєння є правоасоціативним, вони виконуються праворуч наліво:
Тут спочатку виконується c = 100, потім b = c (тобто b = 100), і нарешті a = b (тобто a = 100). Усі три змінні отримують значення 100. Це зручно для ініціалізації групи лічильників, прапорців або результатів одним значенням.
Те саме стосується і складніших виразів правого операнда:
Складені операції присвоєння
Дуже поширена ситуація: змінна бере участь в операції і результат записується назад у ту саму змінну. Наприклад, score = score + 10. Для таких випадків C# пропонує складені (compound) оператори присвоєння — скорочені форми, де лівий операнд неявно присутній і з правого боку.
Арифметичні складені присвоєння
Кожен арифметичний оператор має свій відповідний оператор складеного присвоєння:
| Оператор | Еквівалент | Дія |
|---|---|---|
A += B |
A = A + B |
Додавання та присвоєння |
A -= B |
A = A - B |
Віднімання та присвоєння |
A *= B |
A = A * B |
Множення та присвоєння |
A /= B |
A = A / B |
Ділення та присвоєння |
A %= B |
A = A % B |
Залишок та присвоєння |
Застосуємо їх послідовно до однієї змінної, спостерігаючи за зміною її значення:
Такий стиль запису не лише коротший, але й зменшує ризик помилок: немає небезпеки написати a = b + 5 замість a = a + 5, якщо обидві змінні мають схожі імена.
Побітові складені присвоєння
Аналогічні скорочені форми є й для порозрядних операцій та операцій зсуву:
Побітові складені присвоєння використовуються при роботі з бітовими прапорцями — компактним способом зберігання кількох булевих значень в одному цілому числі.
Правоасоціативність операцій присвоєння
На відміну від арифметичних операцій (які лівоасоціативні), всі операції присвоєння в C# є правоасоціативними: вираз, що стоїть праворуч, обчислюється першим і передає своє значення лівому. Це дозволяє будувати ланцюжки присвоєнь:
Розуміння правоасоціативності важливе при читанні таких ланцюжків: слід читати їх зсередини назовні або справа наліво, крок за кроком обчислюючи кожне підвираз.