Cours de Javascript 2022
Chapitre 2 - Correction 5 : Fonction combinée d'anniversaire
function SayAge(_age)
{
alert("You're " + _age + " years old.");
}
function SayBirthday(_date)
{
alert("You are born on the " + _date + ".")
}
function Combined(_age,_date)
{
SayAge(_age);
SayBirthday(_date)
}
Combined(28,"29/11/1993")
Explications :
Ici, je vous invite à être stratégique, et bien lire la théorie relative à cet exercice, car elle est très importante, et c'est un point de matière souvent mal compris. En effet, nous commençons d'abord par déclarer nos deux fonctions demandée par l'exercice. Ensuite, nous allons les appeler au sein d'une troisième fonction qui va avoir comme simple rôle d'appeler ces 2 fonctions. On peut donc réaliser l'appel de Combined() en une seule ligne. La chose à bien intégrer, c'est que, malgré leur nom similaire, le _date dans Combined() et le _date dans SayBirthday() ne sont pas les mêmes d'un point de vue de l'ordinateur, il en va de même pour _age. On aurait pu donner 4 noms différents à chacun de ces paramètres. Le seul truc à ne pas rater, c'est de bien passer en argument de l'appel de SayAge() le paramètre représentant l'âge de Combined() et il en va de même pour la date et SayBirthday(). Ainsi, la valeur 28 est d'abord attribuée à _age de Combined(), ce _age est ensuite utilisé en argument de SayAge(), et c'est donc le _age de SayAge() qui vaut lui aussi maintenant 28, et peut donc maintenant être affiché !
Solution alternative :
function SayBirthday(_date)
{
alert("You are born on the " + _date + ".")
}
function SayAge2(_age,_date)
{
alert("You're " + _age + "years old");
SayBirthday(_date);
}
SayAge2(29,"17/08/1992");
Ici, petite alternative, pour réussir l'exercice, mais bien moins correcte que la solution précédente, c'est d'appeler, depuis notre fonction SayAge2() la fonction SayBirthday(). Il y a deux problèmes à cette solution dans l'absolu, même si en effet ça répond à l'énoncé, c'est que premièrement, si nous voulons appeler SayAge2() sans SayBirthday(), nous ne pouvons pas, l'inverse est possible, mais nous somme condamné à appeler SayBirthday() en cascade de SayAge2(). Enfin, SayAge2() est au courant d'une information qui ne l'intéresse pas elle même, à savoir le paramètre _date qui ne lui sert qu'à uniquement donner à SayBirthday. Dans l'absolu, une fonction ne devrait être au courant uniquement que des informations dont elle a besoin pour fonctionner. C'est un moindre problème, mais c'est une bonne habitude à prendre pour bien coder.
function SayAgeAndBirthday(_age,_date)
{
alert("You're " + _age + "years old");
alert("You are born on the " + _date)
}
SayAgeAndBirthday(30, "15/12/1991");
Cette solution est convenable, bien qu'un peu tricher par rapport à la consigne. Elle est d'un côté meilleur que la précédente car elle ne multiplie pas les déclaration de fonction, et donc ses paramètres sont tous les deux utiles à son bon fonctionnement, mais d'un côté elle est bien pire, car si nous voulons uniquement afficher la date ou l'âge, nous sommes bloqué, nous sommes quoi qu'il arrive obligés d'appeler les deux. C'est correct, mais pas idéal dans un projet de plus grande ampleur.