Condition et comparaison |
See You Why? |
Avant de voir comment fonctionne une fonction (sans aucun jeu de mots, évidemment), il convient d'en saisir une première approche.
Imaginez-vous devant votre téléviseur allumé, la télécommande à la main : votre télécommande est un outil qui exécutera des tas d'actions selon les appels reçus.
"On|Off" est le bouton qui donne l'ordre d'éteindre votre télé ;
"3" est le bouton qui donne l'ordre de passer sur la 3e chaine sélectionnée ;
jusqu'ici, pas de paramètre qui influencera l'ordre donné.
Mais,
"vol+" est le bouton qui augmentera le volume du son... son résultat dépendra de la précédente valeur mémorisée par le téléviseur...
"P-" diminuera l'ordre de passage des chaines... selon la chaine sur laquelle vous étiez...
En informatique, on dira qu'une fonction est une sorte de sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal.
Belle définition, mais qui n'est pas totalement suivie par JS, puisqu'il existe dans JS des fonctions prédéfinies ou intégrées qui peuvent s'appliquer pour un ou plusieurs types d'objets spécifiques, on appelle ces fonctions des méthodes. Nous avons déjà rencontré alert() et document.write(), voire même pour ceux qui se sont acharnés sur le chapitre précédent big(), strike() ou autres replace(xxx,yyy).
Il y a plusieurs fonctions intégrées permettant de créer de nouveaux scripts ou de modifier des scripts existants. Imaginez les fonctions intégrées comme des blocs de construction de vos scripts et de vos propres fonctions. Chacune exécute une série de chose quand elles sont appelées. Parmi elles, on a déjà cité ou on note : "fontcolor(""#AA3399")", "bold()", "alert()" et "anchor("nom_de_l_ancre")". Les fonctions intégrées s'exécutent lorsqu'elles sont appelées depuis une autre fonction ou un script, vous avez dû le remarquer. Elles sont exécutées lorsque vous placez leur nom dans les lignes de code des scripts et des fonctions. Dès que le script atteint la ligne contenant le nom de la fonction, il l'exécute. Ce procédé est désigné par "appel de fonction".
Le lecteur pourrait s'étonner que selon les cas, soit on ne note rien entre les parenthèses, soit on note un ou plusieurs éléments... qu'on appellera des paramètres. Pour commencer simplement, nous n'aborderons ici que les fonctions sans paramètre, donc avec des parenthèses vides.
Le but de ce chapitre sera de créer ses premières fonctions sans paramètres et de les appeler.
On parlait ci-dessus
d'une part d'un ensemble d'instructions effectuées à créer et
d'autre part d'un appel de la fonction.
Nous développons ces deux notions plus loin dans cette page.
Avant d'être utilisée, la fonction ou miniprogramme doit être définie, elle doit avoir un nom et elle doit pouvoir exécuter les instructions qu'elle mettra en oeuvre. Ce n'est qu'alors que le programmeur pourra l'appeler par son nom, lui transmettre les informations dont elle aura besoin (les paramètres éventuels) et savoir ce qu'elle fera. C'est cela la définition de la fonction.
En JS, la syntaxe de création d'une fonction est simple :
Notre étape 5 est restée incomplète... il fallait y indiquer une ou plusieurs instructions que JS puisse exécuter...
par exemple, envoyer un message de bienvenue dans une fenêtre popup...
on écrira alors :
alert("Un bonjour de la part de CUY");
On n'oubliera pas que toute programmation en JS doit se trouver entre des balises <script>
. Ainsi, la définition de notre première fonction se présentera ainsi :
<script type="text/javascript"> function faire() { alert("Un bonjour de la part de CUY"); // d'autres instructions pourraient être notées ici } </script>
Votre première fonction est définie... mais elle ne sera jamais exécutée si on ne l'appelle pas... reste donc à savoir comment appeler une fonction en JS.
Il existe plusieurs façons d'appeler une fonction en JS, mais dans tous les cas, la définition (ou la déclaration) de la fonction doit avoir été faite avant que la fonction ne soit appelée. Il ne faut pas oublier que JS est interprété dans l'ordre de lecture du programme... qui peut difficilement exécuter un ordre dont il ne comprend pas le sens.
Voici donc quelques méthodes d'appel d'une fonction :
La méthode la plus simple d'appeler une fonction est, dans le corps principal de la page, comme on note d'autres instructions, d'appeler la fonction par son nom, sans oublier les parenthèses ouvrante et fermante, mais restant vides puisqu'il n'y a pas de paramètres à transmettre pour l'instant.
Ne pas oublier de terminer l'instruction par un point-virgule, puisqu'appeler votre fonction est un ordre, une instruction que vous venez de définir.
Votre code pourrait ressembler à ceci :
function faire() {
alert("Un bonjour de la part de CUY");
// d'autres instructions pourraient être notées ici
}var message2;
message2="<center><div style='background:#E6E6FA; width:80%; border:1px solid blue; margin-top:50px; font-family: arial'>";
message2+="<p align='center' style='color:#191970; margin-top: 10px; margin-bottom: 10px; font-size: 120%'><br>";
message2+="<br>Ce calcul se fera dans les limites des données que vous introduirez et n\'est valable qu\'à partir du 1er janvier 2011, <br>pour les salaires soumis au précompte belge <br>et inférieurs à un imposable de 5 610,00 €. ";
message2+="<br>Notre intention est de vous donner une idée de votre salaire net MENSUEL. ";
message2+="<br>CUY ne pourra en aucun cas être tenue pour responsable des éventuelles différences par rapport au calcul fourni par votre employeur.";
message2+="<br>© CUY-05/2011</p></div></center>";
faire();
document.write(message2);
... et sans oublier que ce code doit toujours se trouver entre des balises <script>
.
L'indentation de la source n'est pas obligatoire, mais plus que fortement conseillée : nous essayons toujours de fermer une accolade au niveau de la ligne qui a ouvert cette accolade. L'avenir va vous démontrer que ce conseil n'est pas un luxe.
Tout lecteur verra que l'accolade fermante termine la fonction 'faire' qui a exigé l'accolade ouvrante.
« Jamais de courant d'air en Javascript », il faut fermer toutes les portes que l'on ouvre.
Exemple
|
Un autre usage courant d'une fonction est de l'appeler dans une autre fonction, de la même façon que si on l'appelait du corps principal du programme.
Il est aussi fréquent qu'une fonction soit récursive... c'est-à-dire qu'elle s'appelle elle-même. On retrouve alors l'appel de la fonction dans les instructions de définition de la fonction.
Prudence cependant car c'est l'histoire du serpent qui se mange par la queue ; c'est comme si dans un dictionnaire vous cherchiez la définition du mot "chat" et que le dictionnaire vous indique "jeune de chat qui est devenu grand" (à réfléchir pour de nombreux enseignants) ; c'est le cas de celui à qui on promet de réaliser deux voeux... et qui choisit comme deuxième voeu "je souhaite qu'on réalise mes deux voeux suivants"...
Le lecteur aura compris que le risque est de rentrer dans une boucle sans fin... sauf si on y place une condition de sortie. Mais pour l'instant, ces solutions sont inconnues ; on abordera plus tard les conditions à partir du chapitre 14 (voir ici) et différentes boucles seront étudiées à partir du chapitre 19 (voir ici).
Le cas de récursivité pourrait aussi se présenter avec plusieurs fonctions. Par exemple lorsqu'une fonction1() appelle une fonction2() et que cette dernière rappelle la fonction1()...
Les tutoriels existants montrent parfois cette possibilité d'appeler une fonction dans une page HTML, sans ouvrir de balises <script>
pour l'appel de la fonction. Il reste cependant évident que la définition de la fonction doit avoir été faite entre les balises <script>
.
Les deux propositions rencontrées pour appeler une fonction faire()
sont :
<a href="javascript:faire()"> lien déclencheur </a>
ou
<a href="#" onclick="javascript:faire()"> lien déclencheur </a>
.
Nous en proposons ici une troisième que nous avons testé et qui supprime un rappel de la page courante ou des erreurs souvent engendrées par l'une des possibilités ci-dessus :
<a href="#" onclick="javascript:faire()"; return false;> lien déclencheur </a>
Une méthode particulière d'appeler une fonction est, dans la balise <body> de la page, de faire appel, non pas comme première instruction, mais comme opération à faire dès l'ouverture de la page. Ce peut être utile si on veut demander une information qui sera utilisée dans la suite du programme, si on doit charger une série de fonctions qui riquent d'être utilisées dans la page en cours, etc.
Pour ce faire, il faut :
Notre code devrait alors ressembler à ceci :
Cette méthode a été abordée dans la partie intitulée "dans un href" ci dessus. Cependant, $$$
Le JS est un langage événementiel. Nous avons abordé un événement qui consiste en un chargement de la page... et nous savons que cet évènement est géré dans la balise <BODY onload="faire()">. JS peut gérer de nombreux événements tels que : onClick, onLoad, onUnload, onMouseOver, onMouseOut, onFocus, onBlur, onChange, onSelect, onSubmit, etc.
Ces événement seront étudiés plus en détail dans nos chapitres 21 ("Les événements dans la programmation", voir ici) et 22 ("Quelques événements : onMouseOver onLoad etc.", voir ici). Nous y renvoyons le lecteur.
Votre enseignant (prof de JavaScript, évidemment) entre pour son cours et vous dit : "Aujourd'hui, nous verrons les outils de manipulation d'objet 'string'." Comme un seul homme vous vous exécutez car vous savez qu'il faut :
Vous voilà prêt pour la suite du cours... patience, bientôt un nouvel ordre qui engendrera une nouvelle série d'actions plus élémentaires.
Outre la condition d'égalité entre deux valeurs, les conditions les plus fréquentes sont des conditions d'inégalités. On songera à :
Toujours dans les conditions uniques à vérifier, il existe la négation de la comparaison vue précédemment, à savoir "est différent de..." ou "n'est pas égal à..." qui en JS se notera " !=", soit un point d'exclamation immédiatement suivi d'un simple signe = et qui exprime la négation de la condition vue dans la section précédente "est égal à...". Cette condition sera vraie si les éléments comparés ne sont pas égaux.
Il existe aussi au niveau des comparaisons une autre comparaison qui marque une non égalité entre deux éléments, à savoir "est strictement plus petit que..." ou "est strictement inférieur à..." qui en JS se notera " <", placé à gauche du 'w' sur un clavier belge. Cette condition sera vraie si le premier élément est plus petit que le second de la comparaison, sans lui être égal.
C'est le sens du 'strictement'.
Il existe encore au niveau des comparaisons une autre comparaison qui marque une non égalité entre deux éléments, à savoir "est strictement plus grand que..." ou "est strictement supérieur à..." qui en JS se notera " >", placé à gauche du 'w' sur un clavier belge. Cette condition sera vraie si le premier élément est plus grand que le second de la comparaison, sans lui être égal. Ce n'est donc pas la négation de la précédente, puisque dans aucun des deux cas, on n'accepte qu'il y ait égalité entre les 2 éléments comparés.
C'est le sens du 'strictement'.
Il existe aussi au niveau des comparaisons une autre comparaison qui marque une différence entre deux éléments, à savoir "est plus petit ou égal à..." ou "est inférieur à..." qui en JS se notera " <=". Cette condition sera vraie si le premier élément est plus petit ou égal au second de la comparaison, mais ici en pouvant lui être égal.
C'est donc ici la négation de la condition ">".
Il existe encore et enfin au niveau des comparaisons une autre comparaison qui marque une différence entre deux éléments, à savoir "est plus grand ou égal à..." ou "est supérieur à..." qui en JS se notera " >=". Cette condition sera vraie si le premier élément est plus grand ou égal au second de la comparaison, mais ici en pouvant lui être égal.
C'est donc ici la négation de la condition "<".
voir suite > > >
voir suite > > >