Les opérateurs d’appartenance
Les opérateurs d’appartenance servent à vérifier si une valeur fait partie d’un ensemble. Ils renvoient toujours un booléen : true si l’élément est trouvé, false sinon. Dans Blogger, on peut écrire l’appartenance dans les deux sens, soit en plaçant la valeur testée à gauche (in), soit en la comparant depuis l’ensemble (contains). Ces opérateurs offrent une manière simple et lisible de tester la présence d’un élément dans une liste, par exemple pour vérifier un libellé, une année ou un identifiant précis.
Les origines des opérateurs d’appartenance
L’idée d’appartenance remonte directement aux fondements des mathématiques modernes, et plus particulièrement à la théorie des ensembles élaborée à la fin du XIXᵉ siècle par Georg Cantor. On y retrouve le symbole ∈ (parfois lu « appartient à ») pour indiquer qu’un élément fait partie d’un ensemble. Par exemple, écrire 3 ∈ {1,2,3,4} signifie que le nombre 3 est bien contenu dans cet ensemble. Cette notation est devenue un standard universel, enseigné dès les premiers cours de mathématiques et utilisée dans la logique formelle, l’algèbre et l’informatique.
Avec l’essor de l’informatique et des premiers langages de programmation, la notion d’appartenance a trouvé un terrain d’application naturel. Les programmes manipulent en permanence des collections — tableaux, listes, ensembles — et il est essentiel de pouvoir vérifier si une valeur donnée y figure ou non.
Plusieurs syntaxes se sont imposées au fil du temps :
SQL a popularisé l’usage du mot-clé
IN, qui permet de vérifier si une valeur figure dans une liste ou un sous-ensemble de résultats. L’exemple typique estWHERE pays IN ('FR', 'BE', 'CH'), directement inspiré de la logique ensembliste.Python a repris une syntaxe très proche de la lecture naturelle avec
inetnot in, utilisables sur des listes, tuples, ensembles ou dictionnaires. Cette simplicité a largement contribué à sa popularité.JavaScript, de son côté, a d’abord utilisé
indexOf()puisincludes()pour exprimer la même idée : déterminer si un tableau contient une valeur donnée.Dans des langages plus anciens comme Pascal ou Fortran, on trouvait déjà des mécanismes permettant de tester l’appartenance à un ensemble ou à un intervalle, preuve que la notion était considérée comme fondamentale dès les débuts de la programmation structurée.
Cette diversité montre que l’opérateur d’appartenance n’est pas une invention isolée, mais bien une traduction directe d’un concept mathématique universel dans le domaine de la programmation. Son rôle est de rendre explicite une question très simple et omniprésente : « cet élément fait-il partie de cet ensemble ? ».
Aujourd’hui, quel que soit le langage, cette idée reste centrale. Les variations de syntaxe (in, contains, includes, IN) reflètent surtout des choix de style, mais elles s’ancrent toutes dans la même logique héritée des mathématiques.
Les syntaxes d’écriture
L’appartenance s’exprime toujours avec deux opérandes : une valeur testée et un ensemble dans lequel on vérifie sa présence. Blogger met à disposition deux formes, qui expriment la même idée mais s’écrivent dans un ordre différent.
| Noms | Opérateurs | Syntaxes | Opérandes | Résultat |
|---|---|---|---|---|
Dans |
in |
Syntaxes Infixes (par défaut) string in array[string] boolean in array[boolean] number in array[number] Syntaxes Fonctionnelles in (string, array[string]) in (boolean, array[boolean]) in (number, array[number]) |
2 | boolean |
Contient |
contains |
Syntaxes Infixes (par défaut) array[string] contains string array[boolean] contains boolean array[number] contains number Syntaxes Fonctionnelles contains (array[string], string) contains (array[boolean], boolean) contains (array[number], number) |
2 | boolean |
Utilisations et règles
-
Les opérateurs d’appartenance renvoient toujours une valeur de type booléen :
truesi l’élément est trouvé dans l’ensemble,falsesinon.
-
La valeur testée doit être du même type que les éléments du tableau :
string ↔ array[string].
boolean ↔ array[boolean].
number ↔ array[number].
-
La valeur comparée peut être exprimée de différentes manières :
Une valeur explicite (
"blog",42,true…),Une donnée ou une variable (
data:view.search.label,data:view.isHomepage…),Ou le résultat d’une expression Blogger (ex.
data:posts.length gt 0).
Le résultat de l’opération peut être utilisé dans toute expression qui accepte un booléen, par exemple dans un
<b:if>ou comme condition d’un opérateur ternaire.Attention : le mot-clé
containsexiste aussi comme opérateur de contenu lorsqu’il est appliqué à deux chaînes de caractères (ex."blogger" contains "blog"). Il ne faut pas le confondre avec l’opérateur d’appartenance appliqué aux collections.-
Bonnes pratiques :
Utiliser
inoucontainsselon le sens qui rend l’expression la plus lisible,Éviter de mélanger des types différents dans un même test (risque de résultat toujours faux),
Quelques exemples
Opérateur « IN »
<b:if cond='"Lingua" in ["Agnes","Angie","Lingua", "T'Met", "Tarsi"]'> </b:if>
Cet exemple illustre la syntaxe la plus classique : on teste si une valeur précise appartient à une liste. Ici, la chaîne "Lingua" est bien présente dans le tableau, donc la condition est évaluée à true. C’est la manière la plus directe de vérifier l’appartenance d’un élément.
Opérateur « CONTAINS »
<b:if cond='["Agnes","Angie","Lingua", "T'Met", "Tarsi"] contains "Lingua"'> </b:if>
La même logique peut être exprimée dans l’autre sens, avec contains : le tableau est placé à gauche et la valeur testée à droite. Dans ce cas, la chaîne "Lingua" n’apparaît pas dans le tableau, le résultat est donc false. Le choix entre in et contains dépend surtout de la lisibilité que vous souhaitez donner à votre code.
Imbrication dans une opération Lambda
<b:eval expr='data:posts count p => p.date.year in [2020,2021,2022,2023,2024,2025]'/>
Ici, l’opérateur in est imbriqué dans un lambda : pour chaque post, on teste si son année de publication appartient à la liste [2020,2021,2022,2023,2024,2025]. L’opération count retourne le nombre total de posts dont l’année correspond à l’une de ces valeurs. On obtient donc un résultat numérique (le compteur) basé sur une comparaison d’appartenance.
Combiner avec une opération Lambda
<b:if cond='2025 in (data:posts map p => p.date.year)'> </b:if>
Cette fois, l’appartenance est utilisée après un map. La fonction lambda construit d’abord un tableau de toutes les années de publication, puis 2025 in … teste si l’année 2025 y figure. Le résultat est true dès qu’au moins un post correspond.
Imbrication dans une opération ternaire
<b:eval expr='data:view.search.label in ["photos","videos"] ? "Vous êtes dans la photothèque du blog" : "Vous êtes dans la vidéothèque du blog"'/>
L’opérateur d’appartenance peut aussi servir de condition dans un ternaire. Ici, on vérifie si le libellé de recherche correspond à "photos" ou "videos". Si c’est le cas, on affiche le premier message, sinon le second. C’est une manière élégante de sélectionner un texte parmi deux alternatives en fonction de l’appartenance.
Imbrication dans une opération logique
<b:if cond='data:posts.size in [7,20,100] and data:view.isMultipleItems'> </b:if>
Enfin, l’appartenance peut être combinée avec d’autres opérateurs logiques. Ici, la condition vérifie à la fois que la taille du tableau de posts correspond à l’une des valeurs de la liste [7,20,100] et que la page courante est une page multi-posts. Les deux conditions doivent être vraies pour que l’ensemble s’évalue à true.