Les sélecteurs ternaires & binaires / Binary & ternary operators : ?:
Les sélecteurs ternaires et binaires sont des opérateurs utilisant respectivement trois et deux opérandes. Le résultat est un choix parmi 2 valeurs.
Les syntaxes
Noms | Opérateurs | Syntaxes | Opérandes | Résultat |
---|---|---|---|---|
Sélecteur Ternaire |
? : |
Syntaxe par défaut boolean ? value1 : value2 |
Nombre d'opérandes : 3 | Résultat : value1 ou value2 |
Sélecteur Binaire |
?: |
Syntaxe par défaut value1 ?: value2 |
Nombre d'opérandes : 2 | Résultat : value1 ou value2 |
Le sélecteur ternaire
Le sélecteur ternaire est un opérateur contenant 3 opérandes. La première opérande doit être booléene. Les 2 dernières opérandes peuvent être d'un type quelconque. L'une des 2 sera le résultat final de l'opération en fonction du résultat de la première opérande.
boolean ? value if true : value if false
La valeur booléenne peut être :
Une valeur explicite.
Une donnée.
Le résultat d'une expression Blogger (une opération imbriquée).
Les autres valeurs peuvent être d'un type quelconque :
Une valeur explicite.
Une donnée.
Le résultat d'une expression Blogger (une opération imbriquée).
L'opération peut être imbriquée dans une autre opération qui accepte une valeur qui sera du type du résultat final de l'opération. C-à-D, si le sélecteur ternaire sélectionne une réponse dont le type est un nombre, l'opération parente doit accepter les valeurs de type number.
Le sélecteur binaire
Le sélecteur binaire est un opérateur contenant 2 opérandes.
Les 2 opérandes peuvent être d'un type quelconque.
La première opérande sera le résultat par défaut si la valeur n'est pas vide.
La deuxième opérande sera le résultat si la valeur de la première opérande n'est pas vide.
valeur 1 si non-vide ?: Valeur 2 si valeur 1 est vide
Les valeurs peuvent être d'un type quelconque :
Une valeur explicite.
Une donnée.
Le résultat d'une expression Blogger (une opération imbriquée).
L'opération peut être imbriquée dans une autre opération qui accepte une valeur qui sera du type du résultat final de l'opération. C-à-D, si le sélecteur binaire sélectionne une réponse dont le type est un nombre, l'opération parente doit accepter les valeurs de type number.
Quelques exemples
Opérateur ternaire - Chaînes de caractères
<b:with value='data:blog.isPrivate ? "privé" : "public"' var='statut'> <b:eval expr='"Ce blog est " + data:statut'/> </b:with>
Si la condition est true
, le résultat de l'opération sera la chaîne de caractères : privé
. Dans le cas contraire le résultat sera la chaîne de caractères : public
.
Opérateur ternaire - Des nombres
<b:with value='data:blog.isPrivate ? 10 : 5' var='myNumber'> <b:eval expr='data:myNumber'/> </b:with>
Si la condition est true
, le résultat de l'opération sera le nombre : 10
. Dans le cas contraire le résultat sera nombre : 5
.
Opérateur ternaire - Des tableaux
<b:loop values='data:view.isHomepage ? data:posts limit 5 : data:posts' var='post'> </b:loop>
Si la condition est true
(si la page courante est l'accueil), le tableau de posts contiendra au plus 5 posts. Dans le cas contraire le résultat sera le tableau complet.
Opérateur binaire - Chaînes de caractères
<b:eval expr='data:blog.pageName ?: data:blog.title'/>
La donnée data:blog.pageName
sera le résultat si elle contient une valeur. Dans le cas contraire, data:blog.title
sera le résultat de substitution.
Dans une inclusion commune
<b:loop values='data:widget.type == "PageList" ? data:links : data:posts' var='item'> <a expr:href='data:item.href ?: data:item.url'> <b:eval expr='data:item.title'/> </a> </b:loop>
Dans une inclusion commune destinée a extraire des éléments d'un tableau des gadgets PageList et Blog :
data:links
: Tableau du gadget PageList.href
: URL de l'item.title
: Titre de l'item.
data:posts
: Tableau du gadget Blog.url
: URL de l'item.title
: Titre de l'item.
Les autres opérateurs
+ (concatenate)
+ (addition)
- (substraction)
* (multiplication)
/ (division)
% (modulus)?: (selector)
and (&&)
or (||)
not (!)eq (==)
neq (!=)
lt (<)
lte (<=)
gt (>)
gte (>=)appendParams
fragment
params
pathin
contains (array)contains (string)
format
limit / take
skip / offset
toresizeImage
sourceSetsnippet
any
all
none
count
map / select
filter / where
first