Masquage de variable dans `if`
Fait partie de la section Fondamentaux du Journey GO de Coddy — leçon 37 sur 109.
Apprenons-en davantage sur l'ombrage de variables dans les instructions if. Cela vous permet de créer une variable qui n'existe qu'à l'intérieur du bloc if et de ses blocs else associés.
Tout d'abord, créons une variable en dehors de notre instruction conditionnelle :
x := 10
fmt.Println("Original x value:", x)Après l'exécution de ce code, nous aurons une variable x avec la valeur 10 que nous pourrons utiliser tout au long de notre programme.
Maintenant, utilisons le masquage de variables (variable shadowing) dans une instruction if pour créer une nouvelle variable qui n'existe qu'à l'intérieur de ce bloc :
if y := x * 2; y > 15 {
fmt.Println("y is greater than 15:", y)
// y existe uniquement dans ce bloc
} else {
fmt.Println("y is not greater than 15:", y)
// y est également disponible dans les blocs else
}Après l'exécution de ce code, Go calculera y comme étant 20 (ce qui correspond à x * 2), vérifiera s'il est supérieur à 15, puis exécutera le premier bloc. La sortie s'affichera à l'écran :
y is greater than 15: 20Enfin, essayons d'accéder à nos variables après l'instruction if :
// fmt.Println(y) provoquerait une erreur - y n'existe pas ici
fmt.Println("x is still:", x)Après l'exécution de ce code, nous pouvons toujours accéder à x, mais y n'est plus disponible car elle n'existait qu'à l'intérieur des blocs if et else. La sortie affichera sur l'écran :
x is still: 10Ceci démontre comment l'ombrage de variables (variable shadowing) fonctionne dans les instructions if - la variable y est uniquement accessible à l'intérieur des blocs conditionnels où elle a été déclarée.
Défi
DébutantDans ce défi, vous allez pratiquer le masquage de variables (variable shadowing) dans une instruction if. Vous verrez comment une variable déclarée à l'intérieur d'un bloc if peut avoir le même nom qu'une variable dans la portée externe, mais avec une valeur différente.
Le code possède une variable message dans la portée externe. Votre tâche consiste à créer une variable masquée avec le même nom à l'intérieur du bloc if, puis à afficher les deux variables pour observer l'effet de masquage.
Aide-mémoire
Le masquage de variables (variable shadowing) dans les instructions if vous permet de créer des variables qui n'existent qu'à l'intérieur du bloc conditionnel et de ses blocs else associés.
Syntaxe pour le masquage de variables dans les instructions if :
if variable := expression; condition {
// variable n'existe que dans ce bloc
} else {
// variable est également disponible dans les blocs else
}Exemple :
x := 10
if y := x * 2; y > 15 {
fmt.Println("y is greater than 15:", y)
} else {
fmt.Println("y is not greater than 15:", y)
}
// y n'est plus accessible ici
fmt.Println("x is still:", x)La variable masquée n'est accessible qu'à l'intérieur des blocs if et else où elle a été déclarée, et non en dehors de ceux-ci.
Essayez vous-même
package main
import "fmt"
func main() {
// Variable de portée externe
message := "Hello from outer scope"
isLoggedIn := true
if isLoggedIn {
// TODO: Créer une nouvelle variable nommée 'message' avec la valeur "Hello from inner scope"
// Ceci affiche le message de la portée interne
fmt.Println(message)
}
// Ceci affiche le message de la portée externe
fmt.Println(message)
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
4Opérateurs de comparaison et logiques
Opérateurs de comparaison - Partie 1Opérateurs de comparaison - Partie 2Opérateur logique ANDOpérateur logique OROpérateur logique NOTBases de la priorité des opérateursRécapitulatif - Effectuer des comparaisons7Structures de contrôle : Les boucles
Explication de la boucle `for`Boucle For - Les basesBoucle For - Condition uniquementLe mot-clé `break`Le mot-clé `continue`Boucles imbriquéesRécapitulatif - Répéter des actions2Variables et types de données de base
Qu'est-ce qu'une variableInférence de type avec `:=` Entiers (int)Nombres à virgule flottanteBooléensChaînes de caractères (Strings)Valeurs zéroConstantesConventions de nommageRécapitulatif - Variables et types5Entrées/Sorties de base
Sortie formatéeVerbes de formatageAffichage des typesSaisie utilisateur de baseRécapitulatif - Entrées et Sorties8Fonctions
Comprendre les fonctionsDéclarer une fonctionAppeler des fonctionsParamètres de fonctionRetourner une valeur uniqueRetourner plusieurs valeursValeurs de retour nomméesBases de la portée des fonctionsRécapitulatif - Créer du code réutilisable11Types composites : Slices
Introduction aux SlicesDéclaration de littéraux de SlicesCréation de Slices avec `make`Longueur vs Capacité des SlicesAccès aux éléments d'un SliceAjout d'élémentsDécoupage de Slices/Tableaux existantsItération sur les SlicesCopie de SlicesRécapitulatif - Listes dynamiques3Opérateurs de base
Opérateurs arithmétiquesOpérateur de divisionL'opérateur moduloOpérateur d'affectationOpérateurs d'affectation augmentéeIncrémentation et décrémentationRécapitulatif - Calculs6Structure de contrôle : Les conditionnelles
L'instruction `if`Le mot-clé `else`Le mot-clé `else if`Masquage de variable dans `if`Initialisation des variablesL'instruction `switch``switch` avec expressions`switch` sans expressionLe mot-clé `fallthrough`Récapitulatif - Prendre des décisions9Pointeurs
Qu'est-ce qu'un pointeur ?Déclaration de variables pointeursL'opérateur d'adresseDéréférencement de pointeursUtiliser des pointeurs dans les fonctionsPointeurs NilRécapitulatif - Comprendre les pointeurs12Types composites : Maps
Introduction aux MapsDéclaration de littéraux de MapCréation de Maps avec `make`Ajout et mise à jour de paires clé-valeurAccès aux valeurs d'une MapVérification de l'existence d'une cléSuppression d'entrées de MapTaille d'une MapItération sur les MapsRécapitulatif - Stockage clé-valeur