На цьому уроці ми розглянемо блоки стейтментів в мові С++.
Блоки стейтментів
Блоки стейтментів — це група стейтментів, які компілятор опрацьовує як одну інструкцію. Блок починається з символу { і закінчується символом }, стейтменти знаходяться всередині. Блоки можуть використовуватися в будь-якому місці, де дозволено використовувати один стейтмент. В кінці блоку стейтментів крапка з комою не вказується.
Ви вже бачили приклад блоків при написанні функцій, оскільки тіло функції є блоком:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
int add(int x, int y) { // початок блоку return x + y; } // кінець блоку int main() { // початок блоку // Декілька стейтментів int value(0); add(3, 4); return 0; } // кінець блоку (без крапки з комою) |
Вкладені блоки
Хоча функції не можуть бути вкладені в інші функції, блоки можуть бути вкладені в інші блоки:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
int add(int x, int y) { // початок блоку return x + y; } // кінець блоку int main() { // початок зовнішнього блоку // Декілька стейтментів int value {}; { // початок внутрішнього/вкладеного блоку add(3, 4); } // кінець внутрішнього/вкладеного блоку return 0; } // кінець зовнішнього блоку |
При використанні вкладених блоків, блок, який містить в собі інший блок, називається зовнішнім блоком, а той, який міститься всередині цього блоку — внутрішній/вкладений блок.
Блоки та оператори if
Один з найбільш поширених варіантів використання блоків пов’язаний з операторами if. За замовчуванням оператор if виконує один стейтмент, якщо значенням умови є true. За допомогою блоку ми можемо зробити так, щоб виконувалося відразу кілька стейтментів, якщо значенням умови є true, наприклад:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <iostream> int main() { std::cout << "Enter an integer: "; int value; std::cin >> value; if (value >= 0) { // початок вкладеного блоку std::cout << value << " is a positive integer (or zero)" << std::endl; std::cout << "Double this number is " << value * 2 << std::endl; } // кінець вкладеного блоку else { // початок другого вкладеного блоку std::cout << value << " is a negative integer" << std::endl; std::cout << "The positive of this number is " << -value << std::endl; } // кінець другого вкладеного блоку return 0; } |
Якщо ввести число 3, то програма виведе:
Enter an integer: 3
3 is a positive integer (or zero)
Double this number is 6
Якщо ввести число -4, то програма виведе:
Enter an integer: -4
-4 is a negative integer
The positive of this number is 4
Кількість рівнів вкладеності блоків
Можна навіть розміщувати вкладені блоки всередині інших вкладених блоків:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <iostream> int main() { // 1-й рівень вкладеності блоків std::cout << "Enter an integer: "; int value {}; std::cin >> value; if (value > 0) { // 2-й рівень вкладеності блоків if ((value % 2) == 0) { // 3-й рівень вкладеності блоків std::cout << value << " is positive and even\n"; } else { // також 3-й рівень вкладеності блоків std::cout << value << " is positive and odd\n"; } } return 0; } |
Рівень вкладеності функції (або “глибина вкладеності функції”) — це максимальна кількість блоків, які можуть знаходитися в будь-якій точці функції (включаючи зовнішній блок). У вищенаведеній функції main() є 4 блоки, але рівень вкладеності дорівнює 3.
По факту, обмежень на кількість вкладених блоків немає. Однак не рекомендується робити більше 3 рівнів вкладеності (максимум 4). Якщо ваша функція потребує більшої кількості рівнів вкладеності, то цю функцію краще розбити на кілька підфункцій!
Висновки
Блоки стейтментів дозволяють виконати відразу кілька стейтментів там, де можна використовувати лише один. Вони надзвичайно корисні, коли потрібно виконати відразу декілька інструкцій.
