 Paikalliset ja Globaalit Laajuudet
Paikalliset ja Globaalit Laajuudet
Tässä vaiheessa on tärkeää perehtyä näkyvyysalueen (scope) käsitteeseen ymmärtääksemme, missä tietyt muuttujat (tai vakiot) ovat käytettävissä ja missä eivät.
Muuttujan tai vakion näkyvyysalue määrittää, missä sitä voidaan käyttää.
Kun muuttuja tai vakio määritellään minkä tahansa koodilohkon ulkopuolella, siitä tulee käytettävissä koko ohjelmassa, jolloin sillä on globaali näkyvyysalue. Seuraavassa koodiesimerkissä vakio pi havainnollistaa tätä globaalia näkyvyysaluetta:
index.go
12345678package main import "fmt" const pi float32 = 3.1415 func main() { fmt.Println(pi) }
Vastaavasti, kun muuttuja tai vakio määritellään koodilohkon sisällä, se on käytettävissä ainoastaan kyseisessä koodilohkossa sekä mahdollisissa sisäkkäisissä koodilohkoissa.
Alla oleva havainnollistus erottaa globaalin ja paikallisen näkyvyyden:
Seuraava koodi havainnollistaa alueita, joissa muuttujan käyttö on sallittua ja missä virheitä voi esiintyä:
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 }
Muuttuja value_1 on käytettävissä koko main()-lohkon sisällä, mukaan lukien sisäkkäiset lohkot kuten Ehto 1 ja Ehto 2. Se on myös käytettävissä Ehto 1:ssä ja sen sisäkkäisessä Ehto 2:ssa.
Kuitenkin, jos yritetään käyttää sitä suoraan main()-lohkon ulkopuolella, syntyy virhe. Samoin muuttuja value_2, joka on määritelty Ehto 2:ssa, on käytettävissä vain kyseisessä lohkossa.
On tärkeää huomioida näkyvyysalueet funktioiden yhteydessä. Kun määrittelemme muuttujan tai vakion funktion sisällä, se pysyy kyseisen funktion sisällä eikä ole käytettävissä muissa funktioissa, mukaan lukien main().
Huomio
main()toimii automaattisesti suoritettavana funktiona, kun ohjelma käynnistetään.
index.go
12345678func myFunc() { var number int = 7 fmt.Println(number) // Accessible here } func main() { fmt.Println(number) // Not accessible here }
Toinen tärkeä huomioitava seikka on, että emme voi määritellä kahta tai useampaa samannimistä muuttujaa samassa näkyvyysalueessa tai päällekkäisissä näkyvyysalueissa.
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 } }
On kuitenkin mahdollista määritellä muuttujia, joilla on sama nimi eri näkyvyysalueilla:
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() }
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you explain the difference between global and local scope with an example?
What happens if I try to access a variable outside its scope?
Can you clarify what is meant by overlapping scopes?
Awesome!
Completion rate improved to 1.96 Paikalliset ja Globaalit Laajuudet
Paikalliset ja Globaalit Laajuudet
Pyyhkäise näyttääksesi valikon
Tässä vaiheessa on tärkeää perehtyä näkyvyysalueen (scope) käsitteeseen ymmärtääksemme, missä tietyt muuttujat (tai vakiot) ovat käytettävissä ja missä eivät.
Muuttujan tai vakion näkyvyysalue määrittää, missä sitä voidaan käyttää.
Kun muuttuja tai vakio määritellään minkä tahansa koodilohkon ulkopuolella, siitä tulee käytettävissä koko ohjelmassa, jolloin sillä on globaali näkyvyysalue. Seuraavassa koodiesimerkissä vakio pi havainnollistaa tätä globaalia näkyvyysaluetta:
index.go
12345678package main import "fmt" const pi float32 = 3.1415 func main() { fmt.Println(pi) }
Vastaavasti, kun muuttuja tai vakio määritellään koodilohkon sisällä, se on käytettävissä ainoastaan kyseisessä koodilohkossa sekä mahdollisissa sisäkkäisissä koodilohkoissa.
Alla oleva havainnollistus erottaa globaalin ja paikallisen näkyvyyden:
Seuraava koodi havainnollistaa alueita, joissa muuttujan käyttö on sallittua ja missä virheitä voi esiintyä:
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 }
Muuttuja value_1 on käytettävissä koko main()-lohkon sisällä, mukaan lukien sisäkkäiset lohkot kuten Ehto 1 ja Ehto 2. Se on myös käytettävissä Ehto 1:ssä ja sen sisäkkäisessä Ehto 2:ssa.
Kuitenkin, jos yritetään käyttää sitä suoraan main()-lohkon ulkopuolella, syntyy virhe. Samoin muuttuja value_2, joka on määritelty Ehto 2:ssa, on käytettävissä vain kyseisessä lohkossa.
On tärkeää huomioida näkyvyysalueet funktioiden yhteydessä. Kun määrittelemme muuttujan tai vakion funktion sisällä, se pysyy kyseisen funktion sisällä eikä ole käytettävissä muissa funktioissa, mukaan lukien main().
Huomio
main()toimii automaattisesti suoritettavana funktiona, kun ohjelma käynnistetään.
index.go
12345678func myFunc() { var number int = 7 fmt.Println(number) // Accessible here } func main() { fmt.Println(number) // Not accessible here }
Toinen tärkeä huomioitava seikka on, että emme voi määritellä kahta tai useampaa samannimistä muuttujaa samassa näkyvyysalueessa tai päällekkäisissä näkyvyysalueissa.
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 } }
On kuitenkin mahdollista määritellä muuttujia, joilla on sama nimi eri näkyvyysalueilla:
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() }
Kiitos palautteestasi!