L'opérateur ternaire en Go : comment remplacer C sans perdre la raison

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : l'opérateur ternaire — ami ou ennemi ?

\n\n

Si vous venez en Go du monde de C, C++, Java ou JavaScript, vous êtes probablement habitué à la construction concise :

\n\n
int max = (a > b) ? a : b;
\n\n

C'est l'opérateur ternaire. Il est compact, élégant et permet d'écrire une simple branche conditionnelle en une seule ligne. Mais lorsque vous commencez à coder en Go, une surprise vous attend : Go n'a pas d'opérateur ternaire. Pas du tout. Aucun ? :.

\n\n

Pourquoi les créateurs du langage ont-ils fait ce choix ? Comment écrire maintenant des affectations conditionnelles courtes ? Et surtout, comment le faire idiomatiquement, c'est-à-dire dans le style adopté par la communauté Go ?

\n\n

Dans cet article, nous allons voir :

\n
    \n
  • Pourquoi Go n'a pas d'opérateur ternaire (spoiler : c'est une décision délibérée).
  • \n
  • Comment remplacer le ternaire avec if-else.
  • \n
  • Les techniques avancées : fonctions, map, inlining.
  • \n
  • Quand on peut (et doit) enfreindre la règle.
  • \n
\n\n

C'est parti !

\n\n

Pourquoi Go a-t-il renoncé à l'opérateur ternaire ?

\n\n

La réponse est simple et relève de la philosophie du langage : la lisibilité prime sur la concision.

\n\n

Robert Griesemer (l'un des créateurs de Go) a dit un jour : « L'opérateur ternaire est une source de bugs. Il est trop facile à lire incorrectement, surtout lorsqu'il est imbriqué ». Et c'est vrai. Souvenez-vous au moins du célèbre exemple en C :

\n\n
int x = (a ? b : c) ? d : e;
\n\n

Essayez de comprendre immédiatement ce qu'il fait ? Les créateurs de Go ont donc décidé qu'il valait mieux sacrifier une ligne, mais rendre le code évident.

\n\n

En Go, la priorité est la clarté des intentions. Si vous écrivez une condition, qu'elle soit explicite. L'opérateur ternaire se transforme souvent en « nombre magique » : vous regardez la ligne et ne comprenez pas immédiatement la logique. En Go, cela ne doit pas arriver.

\n\n

Remplacement de base : if-else comme idiome

\n\n

La façon la plus simple et la plus correcte de remplacer le ternaire est d'utiliser un if-else classique. Oui, cela prend 3 lignes au lieu d'une, mais cela se lit sans effort.

\n\n

Exemple : trouver le maximum de deux nombres.

\n\n

En C :

\n
int max = (a > b) ? a : b;
\n\n

En Go (idiomatique) :

\n
var max int\nif a > b {\n    max = a\n} else {\n    max = b\n}
\n\n

« Mais c'est plus long ! » direz-vous. Oui. Mais regardez cela d'un autre côté : dans un mois, vous ouvrirez le code et verrez immédiatement la logique. Pas de parenthèses, pas d'ambiguïtés. Simplement « si a est plus grand que b, alors max = a, sinon max = b ».

\n\n

De plus, la communauté Go considère ce style comme le seul correct pour les conditions simples. N'essayez pas de « tricher » et de tout mettre sur une seule ligne — cela sera considéré comme de mauvais goût.

\n\n

Techniques avancées : quand on souhaite de la concision

\n\n

Parfois, vous écrivez du code où if-else prend 10 lignes, alors qu'il s'agit en fait d'une simple affectation. Dans ces cas, vous pouvez appliquer quelques motifs qui conservent l'idiomaticité tout en rendant le code plus compact.

\n\n

1. Fonction auxiliaire

\n\n

Si vous devez souvent choisir entre deux valeurs, extrayez la logique dans une fonction. C'est particulièrement pratique pour les opérations sur une seule ligne.

\n\n
func ternary(cond bool, a, b string) string {\n    if cond {\n        return a\n    }\n    return b\n}\n\n// Utilisation :\ngreeting := ternary(isMorning, "Bonjour", "Bonsoir")
\n\n

Important : n'appelez pas la fonction ternary — cela est considéré comme de mauvais goût, car vous essayez de « faire passer » le ternaire par une porte dérobée. Il est préférable de donner un nom significatif, comme ifElse ou choose. Mais si vous écrivez pour vous-même — pourquoi pas ?

\n\n

2. Utilisation d'une map pour la sélection

\n\n

Si la condition se résume à un choix entre deux options, vous pouvez utiliser une map avec des clés booléennes. Cela semble inhabituel, mais parfois c'est encore plus lisible.

\n\n
var result = map[bo                

Blogs

Book Recommendations