Область видимості. Константні значення

Відразу зауважимо, що в майбутньому ми ще повернемося до даної теми, тому в даному уроці ми розглянемо лише базові поняття.

Розберемося, що таке область видимості.

Якщо простими словами, то область видимості означає де (звідки) ми можемо використовувати ту чи іншу змінну (функцію, структуру, клас, тощо. Це розглянемо в майбутньому).

Наприклад, якщо у вас є ПК (персональний комп’ютер), то він зазвичай знаходиться в одному місці і використовувати його можна лише перебуваючи безпосередньо поруч (не розглядаємо варіанти дистанційного керування). Тобто, якщо розглядати ПК як змінну, то вона має «локальну область видимості».

Тепер, розглянемо смартфон. Він є не великих розмірів і може частково замінити ПК, при цьому завдяки його габаритам ви можете постійно носити його з собою. Відповідно, ви можете використовувати смартфон в місці, звісно, якщо він є поруч з вами. Якщо ж розглядати смартфон як змінну, то вона має «глобальну область видимості».

Отже, сформулюємо визначення:

«Локальна змінна (змінна яка має локальну область видимості)» це змінна яку можна використовувати лише там де вона знаходиться. Тобто, де вона є оголошена (створена).

«Глобальна змінна (змінна яка має глобальну область видимості)» це змінна яку можна використовувати в точці програми (зазвичай глобальні змінні доступні у файлі в якому вони є створенні).

Розглянемо як створити змінні кожного типу.

Для того щоб створити глобальну змінну потрібно її оголосити за межами основної функції Наприклад:

    
            #include <iostream>
            int global_value = 3; //створюємо глобальну змінну
            int main()
            {
                std::cout << "value = " << global_value << std::endl;
                global_value = 7;
                std::cout << "new value = " << global_value << std::endl;
                return 0;
            }
        
    

Для того щоб створити змінну з локальним типом видимості її варто оголосити (створити) в середині чогось. Тобто, в середині фігурних дужок. Фігурні дужки варто сприймати як кімнату в якій може знаходитися ПК. Відповідно, використовувати її (змінну) можна лише в межах дужок в яких вона є створена.

    
            #include <iostream>
            int main()
            {
                if(5 > 3)
                {//початок if
                    int local_value = 7; //створюємо локальну змінну
                    std::cout << "value = " << local_value << std::endl; //використовуємо локальну змінну
                }//кінець if. життя всіх локальних змінних завершується
                
                //std::cout << "value = " << local_value << std::endl; //отримаємо помилку бо локальна змінна недоступна
                return 0;
            }
        
    

Враховуючи, що фігурних дужок може бути багато і вони можуть знаходитися одні в середині інших, то змінні які створенні в зовнішніх дужках можна використовувати, і внутрішніх дужках.

    
            #include <iostream>
            int main()
            {
                int local_value = 7; //створюємо локальну змінну
                if(5 > 3)
                {//початок if
                    //оскільки, if знаходиться в середині main
                    //то тут можна використати local_value
                    std::cout << "value = " << local_value << std::endl; //використовуємо локальну змінну
                    local_value = 1; //тепер local_value має значення "1"
                }//кінець if
                
                std::cout << "value = " << local_value << std::endl; //local_value створена в main, тому можна використати її тут
                return 0;
            }
        
    

Ви можете створювати змінну з одним і тим же ім’ям, якщо у неї будуть різні типи видимості. Навіть, якщо змінна має локальний тип видимості але її створили у різних фігурних дужках, то це допускається. Програма буде використовувати те значення яке є найближчим.

    
            #include <iostream>
            //глобальна змінна доступна у всій програмі
            std::string a = "global";
            int main()
            {
                //локальна змінна доступна в main та if
                std::string a = "main";
                if(5 > 3)
                {
                    //локальна змінна доступна лише в if
                    std::string a = "if";
                    std::cout << a << std::endl; //найближчою є змінна створена в if
                } //змінна "а" створена в if більше не доступна
                
                std::cout << a << std::endl; //найближчою є змінна створена в main
                return 0;
            }
        
    

Розберемося тепер, що таке константі змінні.

Константна значення якої не може змінюватися під час виконання програми. Її значення вказується при створенні та залишається таким до завершення програми.

Константну змінну можна створити декількома варіантами:

1. Вказати ключове слово далі тип змінної, ім’я змінної та присвоїти значення цій змінній.

2. Вказати тип змінної, ключове слово ім’я змінної та присвоїти значення цій змінній.

    
            #include <iostream>
            int main()
            {
                const int a = 5;
                int const b = 7;
                std::cout << "a = " << a << "\nb = " << b << std::endl;
                return 0;
            }
        
    

Значення для константної змінної ми можемо отримувати від іншої змінної навіть, якщо вона не є константною.

    
            int c;
            std::cin >> c;
            const int a = c; //константній змінній присвоюємо значення не константної змінної
            int const b = a; //константній змінній присвоюємо значення константної змінної
            //значення змінних «a» та «b» тепер не можна змінити
        
    

Важливо! Використання глобальних змінних є небезпечним і часто приводить до помилок. Тому, якщо ви їх хочете використовувати, то краще робіть їх константними або не використовуйте взагалі.

Константні змінні використовуйте в місцях де ви маєте використовувати якісь значення але категорично заборонено їх змінювати. Не варто ними зловживати