Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Paikalliset ja Globaalit Laajuudet | Funktiot
Johdatus Golangiin

bookPaikalliset 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

index.go

copy
12345678
package 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

index.go

copy
12345678910111213141516171819202122232425262728
package 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

index.go

copy
12345678
func 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

index.go

copy
1234567891011
func 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

index.go

copy
1234567891011121314151617
package 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() }
question mark

Missä laajuudessa muuttuja var value int = 6 tulisi määritellä, jotta virheitä ei syntyisi?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 2

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Suggested prompts:

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

bookPaikalliset 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

index.go

copy
12345678
package 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

index.go

copy
12345678910111213141516171819202122232425262728
package 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

index.go

copy
12345678
func 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

index.go

copy
1234567891011
func 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

index.go

copy
1234567891011121314151617
package 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() }
question mark

Missä laajuudessa muuttuja var value int = 6 tulisi määritellä, jotta virheitä ei syntyisi?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 2
some-alt