HOWTO · Go
L'équivalent idiomatique en Go de l'opérateur ternaire de C
Ce tutoriel explore l'équivalent idiomatique en Go de l'opérateur ternaire de C à l'aide d'instructions if-else. Apprenez à implémenter une logique conditionnelle en Go avec des exemples et des explications clairs. Découvrez les avantages de la philosophie de conception de Go, qui met l'accent sur la lisibilité et la maintenabilité, rendant votre code plus facile à comprendre.
Sur cette page
Go n’a pas d’opérateur ternaire. Pour choisir une valeur à partir d’une condition, utilisez une instruction if/else et affectez le résultat dans chaque branche. Cela maintient la décision visible en tant que flux de contrôle et fonctionne partout où une instruction est autorisée.
Ce que fait l’opérateur ternaire de C
L’opérateur conditionnel de C utilise la forme condition ? true_expression : false_expression. Il a trois opérandes : une condition et deux expressions qui fournissent le résultat. C évalue la condition, puis évalue l’expression après ? lorsqu’elle est vraie ou l’expression après : lorsqu’elle est fausse. Par exemple, int b = (a > 3) ? 10 : 20; affecte 10 à b lorsque a est supérieur à 3, et 20 sinon.
Cette forme est une expression, elle peut donc apparaître à l’intérieur d’une expression plus grande ou du côté droit d’une affectation. Go n’a délibérément aucune expression conditionnelle en ligne équivalente. Son instruction if est une instruction, donc une traduction en Go place les affectations dans les branches au lieu d’essayer de mettre if là où C attend une expression.
Utiliser if-else en Go
Le programme complet suivant traduit l’affectation en C et montre également comment affecter 1 ou 0 à partir d’une condition booléenne. La déclaration courte a := 5 crée et initialise a ; var b int déclare b avant que l’une ou l’autre branche ne lui affecte une valeur. La branche else doit être attachée à l’accolade fermante de la branche if. Modifiez a pour voir quelle valeur chaque décision affecte.
package main
import "fmt"
func main() {
a := 5
var b int
if a > 3 {
b = 10
} else {
b = 20
}
var isLarge int
if a > 3 {
isLarge = 1
} else {
isLarge = 0
}
fmt.Println(b)
fmt.Println(isLarge)
}
10
1
La première décision sélectionne entre 10 et 20, correspondant à l’affectation en C. La seconde convertit la condition en un indicateur entier. Ce sont des affectations ordinaires dans chaque branche. La sortie ci-dessus montre les valeurs affichées par le programme.
Un if peut également inclure une instruction d’initialisation, telle que if n := len(items); n > 0 { ... }. La variable qui y est déclarée est limitée à l’instruction if et à ses branches else. Utilisez cette forme lorsque la valeur n’est nécessaire que pour cette décision ; sinon, déclarez-la avant l’instruction afin que le code ultérieur puisse l’utiliser.
Gérer plusieurs conditions en Go
Lorsqu’une décision a plus de deux résultats, une chaîne if/else if rend l’ordre explicite. Go vérifie les conditions de haut en bas et exécute la première branche correspondante ; le else final traite toutes les valeurs restantes. Placez les distinctions les plus utiles dans un ordre clair, en particulier lorsqu’une condition inclut des valeurs correspondant à une autre.
Pour plusieurs valeurs mutuellement exclusives d’une expression, un switch peut être plus facile à parcourir qu’une longue chaîne. Un switch classique compare une valeur à ses valeurs case. Go permet également un switch sans expression, où chaque case contient une condition booléenne, semblable à une chaîne if/else if. Par exemple, switch { case score >= 90: grade = "A"; case score >= 80: grade = "B"; default: grade = "C" } exprime des plages ordonnées. Dans le code source Go formaté, placez le corps de chaque cas sur ses propres lignes pour la lisibilité.
Ni un switch ni une chaîne if ne sont une expression ternaire : ce sont tous deux des instructions qui contrôlent quelles instructions s’exécutent. Choisissez if/else pour une petite décision ou des conditions ordonnées, et choisissez switch lorsque le regroupement de plusieurs cas rend les choix plus faciles à comprendre. Un switch est une option, pas un remplacement universellement meilleur ; la forme de la décision doit guider le choix.
FAQ
Qu’est-ce que l’opérateur ternaire en C ?
C’est l’opérateur conditionnel de C, écrit condition ? true_expression : false_expression. La condition sélectionne l’une des deux expressions de résultat.
Go a-t-il un opérateur ternaire ?
Non. Go utilise des instructions if/else pour la logique conditionnelle. Vous ne pouvez pas utiliser une instruction if comme expression en ligne dans une affectation ou un argument de fonction.
Puis-je utiliser des instructions if-else imbriquées en Go ?
Oui. Pour plusieurs résultats, une chaîne else if est souvent plus facile à suivre que d’imbriquer chaque if dans un autre. Les deux formes sont des instructions, et chaque branche peut affecter une valeur ou effectuer un autre travail.
Quand devrais-je utiliser switch à la place ?
Utilisez switch lorsque les cas forment un ensemble clair d’alternatives ou lorsqu’un switch sans expression rend plusieurs conditions liées plus faciles à lire. Utilisez une chaîne if/else if lorsque les comparaisons ordonnées communiquent la décision plus directement.
La traduction pratique consiste à garder la condition et ses alternatives explicites : utilisez le ?: de C lors de la lecture du code C, et utilisez les instructions if/else ou switch de Go pour le flux de contrôle Go correspondant.