Le Post Infeeny

Les articles des consultants et experts Infeeny

Les petites astuces du langage Javascript

Javascript est un langage qui avait été initialement conçu pour permettre de rendre les pages web un peu plus dynamiques, mais à l’époque de sa conception personne n’aurait imaginé qu’il pourrait prendre un jour une place aussi prépondérante dans la conception des applications web.

Alors que la nouvelle norme ECMAScript 5 commence à être doucement implémentée par les différents navigateurs du marché, certains développeurs ont su faire preuve de beaucoup d’astuce pour permettre à ce langage de donner le meilleur de lui-même.

Déterminer si une année donnée est bissextile

Aucune méthode n’est prévue nativement en Javascript pour permettre de déterminer si une année donnée est bissextile. Mais en s’appuyant sur le comportement par défaut des moteurs Javascript inclus dans les différents navigateurs, il est possible d’obtenir cette information.

function isLeapYear(year) {
    return new Date(year, 1, 29).getMonth() === 1;
}

L’astuce consiste tout simplement à créer une nouvelle date, correspondant au 29 février de l’année que l’on souhaite tester. Notez qu’en Javascript, le numéro de mois est en base 0; le mois de février correspond donc au chiffre 1.

Ce qu’il se passe, c’est que si l’année passée au constructeur de l’objet Date n’est pas bissextile, la date retournée ne sera pas le 29 février… mais le 1er mars. Il ne reste donc qu’à tester si le mois de cette date est bien toujours février, ou si celui-ci s’est miraculeusement transformé en mars.

Obtenir la plus petite ou la plus grande valeur contenue dans un tableau

Prenons le tableau suivant :

var numbers = [ 4, 8, 15, 16, 23, 42 ];

Par défaut, le langage Javascript ne contient aucune méthode particulière permettant de déterminer la plus petite valeur contenue par ce tableau. Par contre, il existe dans l’objet Math une méthode min() permettant de déterminer qu’elle est la plus petite valeur parmi toutes celles passées en paramètre. Il serait donc tentant d’essayer de brancher les deux ensembles, et c’est possible, grâce à la méthode spéciale apply().

Array.min = function(array) {
    return Math.min.apply(Math, array);
};

La méthode apply() permet d’exécuter une méthode en lui passant seulement deux paramètres. Le premier correspond au contexte d’exécution (le mot clef this dans le corps de la méthode), mais ici nous ne souhaitons pas le modifier et nous contentons donc de passer l’objet Math lui-même. Le second paramètre est celui qui nous intéresse. Il permet de passer les paramètres de la méthode non pas les uns après les autres mais regroupés dans un tableau. Or c’est justement d’un tableau de nombres dont nous disposons et que nous souhaitons tester.

Grâce à ce mécanisme, il est alors facile d’ajouter une nouvelle méthode min() à l’objet Array, et de brancher celle-ci à la méthode Math.min(). L’opération devient alors un jeu d’enfant :

var smallestNumber = Array.min(numbers); // 4

Vous pourriez arguer qu’il n’est pas beaucoup plus difficile d’écrire soi-même un algorithme pour boucler sur ces nombres et trouver lequel est le plus petit. Mais en utilisant une méthode incluse nativement dans le moteur Javascript, nous bénéficions d’une amélioration des performances, ce qui sur de très grands tableaux peut s’avérer décisif.

Je vous laisse deviner vous-même comment permettre le calcul de la plus grande valeur contenue dans un tableau.

Créer son propre opérateur de coalescence sur null

Javascript est un langage extrêmement souple, et un nouvel exemple de cette souplesse tient dans le fait que l’opérateur de comparaison OR (noté « || ») est capable d’avoir une influence sur l’assignation d’une variable. Voyons plutôt un exemple :

var nullVariable = null;
var anotherVariable = nullVariable || 12;

La variable nullVariable contient la valeur null. Nous tentons d’assigner cette valeur à une autre variable. Mais notez l’utilisation de l’opérateur OR. Grâce à lui, si la variable source a une valeur booléenne correspondant à false – ce qui est le cas pour le mot-clef null – c’est la valeur de l’opérateur de droite qui sera assignée. Dans notre exemple, la variable anotherVariable se verra donc assigner la valeur 12.

Ce mécanisme, très pratique au demeurant, correspond peu ou prou à l’opérateur ?? en C#. Attention néanmoins, car le test des valeurs booléennes en Javascript obéit parfois à des règles quelque peu abstraites. Par exemple le test du chiffre 0 renvoie false, alors que tout autre nombre – même négatif – renverra true.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :