Menu
CoddyTech

Ombreggiamento delle variabili in `if`

Fa parte della sezione Fondamenti del percorso GO di Coddy. Lezione 37 di 109.

Impariamo a conoscere l’oscuramento delle variabili nelle istruzioni if. Un’istruzione if può dichiarare una variabile prima della sua condizione, e quella variabile esiste solo all’interno del blocco if e dei relativi blocchi else. Se ha lo stesso nome di una variabile esterna all’if, oscura (nasconde) la variabile esterna all’interno di quei blocchi.

Per prima cosa, creiamo una variabile fuori dalla nostra istruzione condizionale:

x := 10
fmt.Println("Original x value:", x)

Dopo aver eseguito questo codice, avremo una variabile x con il valore 10 che potremo usare in tutto il nostro programma.

Ora dichiariamo una nuova variabile y nell'istruzione if. Esiste solo all'interno dei blocchi if e else:

if y := x * 2; y > 15 {
    fmt.Println("y is greater than 15:", y)
    // y esiste solo in questo blocco
} else {
    fmt.Println("y is not greater than 15:", y)
    // y è disponibile anche nei blocchi else
}

Dopo aver eseguito questo codice, Go calcolerà y come 20 (ovvero x * 2), verificherà se è maggiore di 15 e poi eseguirà il primo blocco. L'output verrà mostrato sullo schermo:

y is greater than 15: 20

Infine, proviamo ad accedere alle nostre variabili dopo l'istruzione if:

// fmt.Println(y) causerebbe un errore - y non esiste qui
fmt.Println("x is still:", x)

Dopo aver eseguito questo codice, possiamo ancora accedere a x, ma y non è più disponibile perché esisteva solo all'interno dei blocchi if e else. L'output verrà visualizzato sullo schermo:

x is still: 10

Questo dimostra l'ambito di una variabile dichiarata in un'istruzione if: la variabile y è accessibile solo all'interno dei blocchi condizionali in cui è stata dichiarata. Non esiste una y esterna, quindi qui non viene nascosto nulla. Se invece l'avessimo chiamata x, avrebbe nascosto la x esterna all'interno di quei blocchi, e la x esterna sarebbe rimasta 10 anche dopo.

challenge icon

Sfida

Principiante

In questa sfida, ti eserciterai con l'ombreggiamento delle variabili in un'istruzione if. Vedrai come una variabile dichiarata all'interno di un blocco if possa avere lo stesso nome di una variabile nell'ambito esterno, ma un valore diverso.

Il codice contiene una variabile message nell'ambito esterno. Il tuo compito è creare una variabile ombreggiata con lo stesso nome all'interno del blocco if e poi stampare entrambe le variabili per osservare l'effetto dell'ombreggiamento.

Provalo tu

package main

import "fmt"

func main() {
	// Variabile dell'ambito esterno
	message := "Hello from outer scope"
	
	isLoggedIn := true
	
	if isLoggedIn {
		// TODO: Crea una nuova variabile chiamata 'message' con il valore "Hello from inner scope"
		
		// Questo stampa il messaggio dell'ambito interno
		fmt.Println(message)
	}
	
	// Questo stampa il messaggio dell'ambito esterno
	fmt.Println(message)
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Compilatore Go online