Все переменные имеют определенную область видимости (scope). Область видимости представляет часть программы, в пределах которой можно использовать объект. Как правило, область видимости ограничивается блоком кода, который заключается в фигурные скобки. В зависимости от области видимости создаваемые объекты могут быть глобальными и локальными.
Если определить переменную внутри фигурных скобок, то есть внутри некоторого блока кода, то такая переменная является локальной и доступна только внутри этого блока кода.
Рассмотрим следующий код:
const global = "global"; // глобальная константа void main() { const local_main = "main"; // локальная константа - доступна только в main if (true) { const local_if ="if"; // локальная константа - доступна только в блоке if print(global); print(local_main); print(local_if); } // конец жизни константы local_if print(global); print(local_main); // print(local_if); // ! Ошибка } // конец жизни константы local_main
Константа global определена вне функции main и вне любых фигурных скобок. Поэтому она является глобальной и видна в любом месте текущего файла после своего определения. Подобные константы и переменные еще называются константами/переменными верхнего уровня (top level).
Константа local_main
определена внутри функции main. Поэтому она является локальной и видна в любом месте функции main. Однако вне функции main
она не видна, и к ней нельзя обратиться.
Константа local_if
определена в блоке конструкции if, который ограничен фигурными скобками. Эти же фигурные скобки ограничивают область видимость, в рамках которой
доступна константа local_if
. Вне блока if константа local_if
не существует.
Другой пример:
const global = "global"; void main() { const local_main = "main"; print(global); print(local_main); // print(local_hello); // Так нельзя - константа local_hello не доступна } void hello(){ const local_hello = "hello"; print(global); print(local_hello); // print(local_main); // Так нельзя - константа local_main не доступна }
Здесь уже определено две функции. Константа global является глобальной и соответственно доступна в любой функции данного файла. А вот константа local_main, поскольку определена в
функции main, вне этой функции (например, в функции hello) не доступна. Аналогично консатнта local_hello
, определенная в функции hello, вне этой функции не доступна.