Локальні та Глобальні Області Видимості
На цьому етапі важливо розглянути поняття областей видимості, щоб зрозуміти, де саме можна отримати доступ до певних змінних (або констант), а де — ні.
Область видимості змінної або константи визначає, де її можна використовувати.
Коли змінна або константа оголошується поза будь-яким блоком коду, вона стає доступною у всій програмі, отримуючи статус глобальної області видимості. У наступному фрагменті коду константа pi є прикладом такої глобальної області видимості:
index.go
12345678package main import "fmt" const pi float32 = 3.1415 func main() { fmt.Println(pi) }
Навпаки, коли змінна або константа оголошується всередині блоку коду, вона залишається доступною лише в межах цього конкретного блоку коду та будь-яких вкладених блоків, якщо такі є.
Наведена нижче ілюстрація окреслює відмінності між глобальною та локальною областями видимості:
Наступний код демонструє області, де доступ до змінних дозволений, а також місця, де можуть виникати помилки:
index.go
12345678910111213141516171819202122232425262728package main import "fmt" func main() { var value_1 int = 1 // Condition 1 if(true) { var value_2 int = 2 // Condition 2 if (true) { var value_3 int = 3 fmt.Println("In Condition 2:", value_1) fmt.Println("In Condition 2:", value_2) fmt.Println("In Condition 2:", value_3) } fmt.Println("In Condition 1:", value_1) fmt.Println("In Condition 1:", value_2) fmt.Println("In Condition 1:", value_3) // Error here } fmt.Println("In Main:", value_1) fmt.Println("In Main:", value_2) // Error here fmt.Println("In Main:", value_3) // Error here }
Змінна value_1 залишається доступною протягом усього блоку коду main(), включаючи вкладені блоки, такі як Умова 1 та Умова 2. Вона також доступна у межах Умови 1 та її вкладеної Умови 2.
Однак спроба безпосередньо звернутися до неї поза межами блоку main() призведе до помилки. Аналогічно, змінна value_2, оголошена у межах Умови 2, доступна лише у цьому конкретному блоці коду.
Важливо враховувати області видимості у контексті функцій. Коли ми оголошуємо змінну або константу всередині функції, вона залишається обмеженою цією функцією і недоступна в інших функціях, включаючи main().
Note
main()виконує роль автоматично виконуваної функції під час запуску програми.
index.go
12345678func myFunc() { var number int = 7 fmt.Println(number) // Accessible here } func main() { fmt.Println(number) // Not accessible here }
Ще один важливий момент: не можна оголошувати дві або більше змінних з однаковим ім'ям у межах однієї області видимості або у перетинаючихся областях видимості.
index.go
1234567891011func myFunc1() { var number int = 7 var number int = 9 // Error here } func myFunc2() { var number int = 7 if(2 > 1) { var number int = 9 // Error here } }
Однак можливо оголошувати змінні з однаковими іменами в різних областях видимості:
index.go
1234567891011121314151617package main import "fmt" func myFunc1() { var number int = 7 fmt.Println("In Func 1:", number) } func myFunc2() { var number int = 9 fmt.Println("In Func 2:", number) } func main() { myFunc1() myFunc2() }
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 1.96
Локальні та Глобальні Області Видимості
Свайпніть щоб показати меню
На цьому етапі важливо розглянути поняття областей видимості, щоб зрозуміти, де саме можна отримати доступ до певних змінних (або констант), а де — ні.
Область видимості змінної або константи визначає, де її можна використовувати.
Коли змінна або константа оголошується поза будь-яким блоком коду, вона стає доступною у всій програмі, отримуючи статус глобальної області видимості. У наступному фрагменті коду константа pi є прикладом такої глобальної області видимості:
index.go
12345678package main import "fmt" const pi float32 = 3.1415 func main() { fmt.Println(pi) }
Навпаки, коли змінна або константа оголошується всередині блоку коду, вона залишається доступною лише в межах цього конкретного блоку коду та будь-яких вкладених блоків, якщо такі є.
Наведена нижче ілюстрація окреслює відмінності між глобальною та локальною областями видимості:
Наступний код демонструє області, де доступ до змінних дозволений, а також місця, де можуть виникати помилки:
index.go
12345678910111213141516171819202122232425262728package main import "fmt" func main() { var value_1 int = 1 // Condition 1 if(true) { var value_2 int = 2 // Condition 2 if (true) { var value_3 int = 3 fmt.Println("In Condition 2:", value_1) fmt.Println("In Condition 2:", value_2) fmt.Println("In Condition 2:", value_3) } fmt.Println("In Condition 1:", value_1) fmt.Println("In Condition 1:", value_2) fmt.Println("In Condition 1:", value_3) // Error here } fmt.Println("In Main:", value_1) fmt.Println("In Main:", value_2) // Error here fmt.Println("In Main:", value_3) // Error here }
Змінна value_1 залишається доступною протягом усього блоку коду main(), включаючи вкладені блоки, такі як Умова 1 та Умова 2. Вона також доступна у межах Умови 1 та її вкладеної Умови 2.
Однак спроба безпосередньо звернутися до неї поза межами блоку main() призведе до помилки. Аналогічно, змінна value_2, оголошена у межах Умови 2, доступна лише у цьому конкретному блоці коду.
Важливо враховувати області видимості у контексті функцій. Коли ми оголошуємо змінну або константу всередині функції, вона залишається обмеженою цією функцією і недоступна в інших функціях, включаючи main().
Note
main()виконує роль автоматично виконуваної функції під час запуску програми.
index.go
12345678func myFunc() { var number int = 7 fmt.Println(number) // Accessible here } func main() { fmt.Println(number) // Not accessible here }
Ще один важливий момент: не можна оголошувати дві або більше змінних з однаковим ім'ям у межах однієї області видимості або у перетинаючихся областях видимості.
index.go
1234567891011func myFunc1() { var number int = 7 var number int = 9 // Error here } func myFunc2() { var number int = 7 if(2 > 1) { var number int = 9 // Error here } }
Однак можливо оголошувати змінні з однаковими іменами в різних областях видимості:
index.go
1234567891011121314151617package main import "fmt" func myFunc1() { var number int = 7 fmt.Println("In Func 1:", number) } func myFunc2() { var number int = 9 fmt.Println("In Func 2:", number) } func main() { myFunc1() myFunc2() }
Дякуємо за ваш відгук!