Passer au contenu principal
eLearner.app
Module 3 · Leçon 3 sur 513/50 dans le cours~10 min
Leçons du module (3/5)

Fonctions variadiques

Les fonctions variadiques acceptent un nombre arbitraire d'arguments du même type. Vous les déclarez en mettant ... avant le type du dernier paramètre. À l'intérieur de la fonction, le paramètre est une slice.

Déclaration

Go
func sum(nums ...int) int {
    tot := 0
    for _, n := range nums {
        tot += n
    }
    return tot
}

sum()              // 0   (nums = []int{})
sum(1)             // 1
sum(1, 2, 3, 4)    // 10

Seul le dernier paramètre peut être variadique :

Go
func log(prefix string, values ...any) { ... }   // ok
// func wrong(...int, suffix string) {}            // ERRORE

Étaler une tranche

Si vous possédez déjà une tranche, vous pouvez la passer à une fonction variadique avec ...:

Go
nums := []int{1, 2, 3}
sum(nums...)         // 6 — espande lo slice nei singoli argomenti

Le "..." va après la tranche. Sans propagation, vous obtiendriez un type erreur : vous passeriez un []int où la fonction attend une séquence de int.

nums est une tranche, pas un nouveau conteneur

À l’intérieur de la fonction nums a le type []int. Toutes les tranches standards travaux d'exploitation : len(nums), nums[0], range, etc.

Cas d'utilisation classique : fmt.Println

Toutes les fonctions Print* de fmt sont variadiques :

Go
// signature (semplificata):
// func Println(a ...any) (n int, err error)

fmt.Println("ciao", 42, true)
args := []any{"a", "b", "c"}
fmt.Println(args...)

Essayez-le

Exercice#go.m3.l3.e1
Tentatives : 0Chargement…

Définissez sum(nums ...int) int qui renvoie la somme de tous les arguments.

Chargement de l'éditeur…
Afficher l'indice

À l’intérieur de la fonction `nums` a le type `[]int`.

Solution disponible après 3 tentatives

Exercice#go.m3.l3.e2
Tentatives : 0Chargement…

Appelez la fonction de somme existante en passant les numéros de tranche avec spread `nums...`.

Chargement de l'éditeur…
Afficher l'indice

Le `...` va APRÈS le nom de la tranche.

Solution disponible après 3 tentatives

Quiz#go.m3.l3.e3
Prêt

Dans `func f(args ...string)`, de quel type est `args` ?

Go
func f(args ...string) {
    _ = args
}
Options de réponse

Récapitulatif

  • ...T comme paramètre LAST = fonction variadique ; à l'intérieur, c'est []T.
  • Appelé avec des valeurs uniques : le compilateur les collecte dans une tranche.
  • Appelé avec une slice existante : slice... (spread, réutilise la slice).
  • Toutes les fonctions fmt.Print* sont variadiques.
  • Seul le dernier paramètre peut être variadique.