Premiers pas en JavaScript
16.3 (condition)?(sivrai):(sifaux)...
opérateur ternaire
cuy copyleft
  See You Why?  

 


test sur la condition IF... ELSE IF...(16.2) | | la fonction aléatoire (16.4)

Contenu

 

 

I. Les conditions IF imbriquées

voir <<< séquence précédente

 

II. La condition IF... ELSE IF...

voir <<< séquence précédente

 

III. Opérateur ternaire : (condition)?(sivrai):(sifaux)...

Le lecteur qui a quelques notions du langage C ou autre langage sera heureux de retrouver cette structure commune à différents langages. Il s'agit bien d'un opérateur qui teste une condition, puis, selon que la condition se révèle vraie ou fausse, affecte une variable de valeur différente.

Cet opérateur est généralement baptisé l' "opérateur conditionnel" ou encore l' "opérateur ternaire", puisqu'il qu'il utilise trois opérandes. Sa syntaxe est :

condition?resultat1:resultat2

  1. une condition logique ;
  2. suivie d'un point d'interrogation ;
  3. suivie d'une instruction "resultat1" à réaliser si la condition est vraie ;
  4. suivie d'un "deux-points" ;
  5. suivie d'une instruction "resultat2" à réaliser si la condition est fausse.

Un premier exemple de l'ordinateur qui délibère seul :

mention = (moyenne<10)?'refusé':'admis'; 

Donnons-en un deuxième exemple (qui fait appel à l'objet Date() que nous abordons au chapitre 35, mais le lecteur aura vite compris que maintenant sera un objet Date et que gethours() extrait l'heure de cet objet Date) et montrons que cette syntaxe condensée peut toujours s'écrire sous forme d'un IF... ELSE...

var maintenant = new Date();
var salutation = "Bon" + ((maintenant.getHours() > 17) ? "soir." : "jour.");

Cette double instruction affecte "Bonjour." à la variable 'salutation', sauf s'il est 18 heures ou plus, auquel cas la valeur affectée deviendrait "Bonsoir.", ce qui aurait pu s'écrire :

var maintenant = new Date();
if (maintenant.getHours() > 17) {
    var salutation = "Bon"+
"soir.";
} else {
    var salutation = "Bon"+
"jour.");
}

Un retour à notre premier exemple, plus simple, affectera la variable 'mention' de la valeur 'réussite' ou 'échec' selon que la moyenne soit ou non supérieure à 10/20...

var moyenne = prompt("Quelle est la moyenne de l'élève ?");
var mention = (moyenne >=10)?"réussite":"échec";

que l'on aurait aussi pu écrire ainsi :

var moyenne = prompt("Quelle est la moyenne de l'élève ?");
if (moyenne >= 10) {
    var mention = "réussite
";
} else {
    var mention = "échec
");
}

Dans nos deux exemples précédents, on affectait une variable d'une valeur, selon une condition fixée. Même si certains tutoriels n'en parlent pas et d'autres mentionnent qu'il faut l'éviter, JS permet aussi d'exécuter une instruction unique différente selon la valeur de la condition...
Nous proposons même ici, un moyen de contourner cette instruction unique en créant des fonctions qui regroupent plusieurs instructions ;
nombreux sont ceux qui ont essayé diverses tentatives pour y arriver sur base de la syntaxe de base :
Condition ? Instruction_1 : Instruction_2;
- emploi de l'opérateur && (voir chap. 17, conditions complexes)
     Condition ? Instruction_1 && Instruction_2 : Instruction_3 && Instruction_4;
- emploi de parenthèses
     Condition ? (Instruction_1; Instruction_2;) : (Instruction_3; Instruction_4);
- emploi de virgules, de crochets, etc.
     function casvrai() {
        instruction1;
        instruction2;
        return true;
    }
    function casfaux() {
        instruction3;
        instruction4;
        return true;
    }
    Condition ? casvrai() : casfaux();

     

Nous verrons même que des conditions imbriquées peuvent être utilisées en suivant la syntaxe suivante où vous voyez 3 conditions dans une même instruction :

(cond1 ? (cond2 ? result21 : result22 ) : (cond3 ? result31 : result32 ) );

Nous n'avons trouvé que peu de tutoriels qui prenaient le soin d'expliciter des conditions multiples imbriquées dans une même instruction faisant appel à la procédure '?:' nous allons donc proposer ici un nouvel exemple d'utilisation classique de l'opérateur dit 'ternaire', montrer qu'en une seule ligne d'instruction, il peut se traduire par des conditions IF...ELSE... avant de montrer des exemples d'utilisation de cet opérateur ternaire avec de multiples conditions imbriquées. Ainsi :

if (x == "p") {
     a = 22;
} else {
     a = 23;
}
 

peut aussi s'écrire :
a= (x="p")?22:23;

A. opérateur ternaire ' ?: ' avec conditions multiples imbriquées

Imaginons un nombre entier tiré au hasard entre 1 et 999. On demande de le situer par rapport au nombre de chiffres. Il s'agit donc de le situer dans l'une de tranches [1,9], [10,99] ou [100,999]... ce qui risque de générer de nombreux tests consécutifs.

On commencera par établir une condition simple... mais extrême...
dans notre cas,
- soit plus petit (strictement) que 10,
- soit plus grand (ou égal) que 100.

On écrira donc

    message = (n<10)?"un seul chiffre.":message2;

ou

    messagebis = (n>=100)?"trois chiffres.":message2bis;

Les messages non fixés ne le sont pas, car ils dépendent encore d'une condition... toujours aussi simple, mais à peine moins extrême...
dans notre cas,
- message2 variera selon que n soit plus petit que 100 ou non,
- message2bis variera selon que n soit plus grand que 10 ou non.

On écrira donc

    message = (n<10)?"un seul chiffre.":(n<100)?"deux chiffres":"trois chiffres";

ou

    messagebis = (n>=100)?"trois chiffres.":(n>=10)?"deux chiffres":"un seul chiffre";

Il nous parait évident que les deux méthodes (bis ou non) sont équivalentes... et si la condition par laquelle on commence est la plus sévère... c'est chaque fois l'instruction après le deux-points que l'on développe (en devenant de moins en moins sévère)...
Le lecteur attentif aura compris que si on commence par une condition moins sévère, c'est chaque fois l'instruction avant le deux-points que l'on précise (en devenant de plus en plus sévère)...

On ne s'étonnera pas d'instruction telle que :

    frais_transport = (total_commande<1500)?(total_commande<750)?35:25:0;

que l'on pourra mentalement décomposer ainsi, même si JS ne joue pas avec des couleurs :

    frais_transport = (total_commande<1500)?(total_commande<750)?35:25:0;

La partie notée en rouge n'étant que l'instruction (elle aussi conditionnelle) à exécuter si la condition (notée en vert) est vérifiée.

Le lecteur attentif aura compris ce que signifie cette ligne unique de code :
var langue = localStorage['langue'] != undefined ? localStorage['langue'] : 'FR';

Non? Un peu d'aide alors. Généralement une contion se note entre parenthèses, donc on lira :
var langue = (localStorage['langue'] != undefined) ? localStorage['langue'] : 'FR';

Ou encore (sans oublier que JS ne connait pas les couleurs) :
var langue = (localStorage['langue'] != undefined) ? localStorage['langue'] : 'FR';
c'est-à-dire :
La variable langue nouvellement déclarée, prendra comme valeur,
* si le tableau localStorage, à l'indice 'langue', n'est pas indéfini,
   prendra la valeur définie,
* sinon, le tableau localStorage, à l'indice 'langue'
   prendra la valeur 'FR'.

Mais quoi de mieux que de connaitre l'usage des tableaux associatifs... ce sera fait au chapitre 26, ici.

Un autre exemple ? Plus facile semble-t-il...

var txtVedette = (txtSex=="M")?"Monsieur":"Madame"; 

 

 

IV. La fonction aléatoire

voir suite >>>

 

VIII. Exercices relatifs aux conditions IF imbriquées et fonction aléatoire

voir suite >>>

 

IX. Test relatif aux conditions IF imbriquées et fonction aléatoire

voir suite >>>

 

 


test sur la condition IF... ELSE IF...(16.2) | | la fonction aléatoire (16.4)

 

 

Merci de votre visite à partir de :

Vous êtes sur :
https://cuy.be/cours/jvs/jvs_164_condition_sivrai_sifaux.html

partager sur FaceBook...           consulter sur FaceBook...

 

copyleft
Des liens ne fonctionnent plus ?
Avez-vous des suggestions ?
des commentaires, des corrections, un encouragement... ?
Pour info : Non, il n'y a pas de version papier ou DOC, PDF, etc. de ces notes.


Envoyez-moi un E-Mail (cuy(point)w(at)skynet(point)be)

Attention (at) signifie @ et (point) signifie .

Accueil CUY = See you why?

Compteur gratuitEasyCounter     BelStat Monitored by BelStat - Your Site Counts
La 1 000 000e page a été visitée le 21 mai 2010.
La 2 000 000e page a été visitée ce 18 mars 2012, vers midi.
La 3 000 000e page a été visitée ce 7 janvier 2014 entre 18 h et 18 h 45,
La 4 000 000e page a été visitée ce 5 juin 2015 entre 15 h 49 et 15 h 52,
La 5 000 000e page a été visitée ce 29 aout 2017 après 23 h 30,
Et la 6 000 000e page visitée, trop tôt pour y penser ?
 
et, d'après BelStat, CUY est visité surtout en semaine, peu le weekend...
moins et irrégulièrement pendant les vacances :

visites sur 3 mois, de la mi octobre 2013 à la mi janvier 2014.
 
La 3 333 333e page visitée a eu lieu ce mardi 10 juin 2014, en début d'après midi...
La 3 666 666e page visitée a eu lieu ce dimanche 28 decembre 2014, vers 16 h...
Un tiers de million de pages visitées en 154 jours cela fait une moyenne de 2165 pages visitées par jour...
Deux tiers de million de pages visitées en 355 jours soit une moyenne de 1878 pages visitées par jour...
et seulement 1195 pages visitées quotidiennement pendant les vacances estivales
de la mi juin à la mi septembre 2014

Vous voulez lire quelques messages reçus ?
quelques encouragements ?
Cliquez ici


Fin septembre 2009, installation de ce compteur
qui ne compte chaque nouvel ordinateur visiteur qu'une seule fois
free counter
 
m-à-j du 22/11/2021 :

Depuis cette fin septembre 2009, parmi les 210 pays (sur 274 drapeaux connus) qui nous ont visité,
voici les 100 pays qui nous visitent le plus, 
Nos petits visiteurs, classés par date de visite, où un seul ordi nous a visité, sont :
199. Turkmenistan (TM May 10, 2017) ; 200. Lesotho (LS March 1, 2017) ;
201. Turks and Caicos Island (TC January 18, 2016
202. Cook Islands (CK September 19, 2015)  203. Faroe Islands (FO January 27, 2015
204. Virgin Islands American (VI November 12, 2014) ;
205. Belize (BZ September 29, 2014) ;206. Eswatini - Swaziland (SZ July 21, 2014) ;
207. Grenada (GD April 3, 2014) ; 208. Timor-Leste (TI March 29, 2014) ;
209. American Samoa (AS December 26, 2012) ; 210. Guyana (GY November 5, 2010).