Bases de la portée des fonctions
Fait partie de la section Fondamentaux du Journey GO de Coddy — leçon 58 sur 109.
En Go, les variables déclarées à l'intérieur d'une fonction ne sont accessibles qu'au sein de cette fonction. C'est ce qu'on appelle la portée de fonction (function scope).
Créez une fonction avec une variable locale :
func calculateTotal(price int, quantity int) int {
tax := 0.1 * float64(price * quantity) // variable locale
total := price * quantity + int(tax)
return total
}
func main() {
result := calculateTotal(10, 2)
fmt.Println("Total:", result)
// fmt.Println(tax) // Erreur : tax n'est pas accessible ici
}La sortie affiche uniquement la valeur retournée :
Total: 22La variable tax existe uniquement à l'intérieur de la fonction calculateTotal et ne peut pas être accédée depuis main.
Défi
DébutantDans ce défi, vous allez vous exercer à comprendre la portée des fonctions en Go. Vous devez corriger un programme simple qui présente un problème de portée.
Le programme possède une variable globale message et une fonction qui tente de la modifier. Votre tâche consiste à corriger le code afin que la fonction mette à jour correctement la variable globale.
Aide-mémoire
Les variables déclarées à l'intérieur d'une fonction ne sont accessibles qu'au sein de cette fonction (portée de fonction) :
func calculateTotal(price int, quantity int) int {
tax := 0.1 * float64(price * quantity) // variable locale
total := price * quantity + int(tax)
return total
}
func main() {
result := calculateTotal(10, 2)
fmt.Println("Total:", result)
// fmt.Println(tax) // Erreur : tax n'est pas accessible ici
}Les variables locales n'existent qu'au sein de leur fonction et ne peuvent pas être consultées de l'extérieur.
Essayez vous-même
package main
import "fmt"
// Variable globale
var message string = "Hello from global scope"
func updateMessage() {
// Ceci crée une nouvelle variable locale au lieu de modifier la variable globale
message := "Hello from function scope"
fmt.Println("Inside function:", message)
}
func main() {
fmt.Println("Before function call:", message)
updateMessage()
// TODO: Le message global a toujours sa valeur d'origine
// Modifier la fonction updateMessage() pour changer la variable globale
fmt.Println("After function call:", 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