mardi 11 septembre 2012

Lire les commentaires c'est pas bien des fois


Un jour je voulais trier les éléments d'un tableau suivant une colonne contenant des dates. J'ai cherché un peu et je suis tombé sur la méthode 'dateCompare' de la classe native flex 'ObjectUtil' . La première chose que j'ai fait était de lire le commentaire de l'entête de cette méthode (Je suis bon élève quand je veux :D). Une fois que j'ai compris comment il fallait l'utiliser, j'ai écris mes lignes de code à la vitesse de l'éclair. Ensuite j'ai compilé le code flex de mon application (pas à la vitesse de l'eclair), il n'y avait pas d'erreurs de syntaxe bien sure :D. J'ai lancé l'application. Et !! Qu'est ce que je constates? Je constates que tous mes tris de dates étaient inversés. Je reviens dans mon code, je cherches, je recherches, je modifie des trucs qui n'ont rien avoir en espérant que c'est ça, je recompiles, je testes, RIEN!

Après à peu prés une heure de recherches et de théories farfelues portant sur les limites du compilateurs flex, j'ai eu l'idée de relire l'entête de la méthode et de lire le code de cette méthode. C'est à cet instant que j'ai remarqué que les commentaires expliquaient l'inverse de ce qui était implémenté dans le code de la méthode. Concrètement dans le code si date1<date2 par exemple alors la méthode retourne -1.
if (na < nb)
    return -1 ;

Mais dans le commentaire si date1<date2 alors la méthode retournerait 1.
* 1 if <code>a</code> is <code>null</code>
* or before <code>b</code>;

Si vous voulais voir tout l'exploit, je vous laisse juger par vous même :
    /**
     *  Compares the two Date objects and returns an integer value
     *  indicating if the first Date object is before, equal to,
     *  or after the second item.
     *
     *  @param a Date object.
     *
     *  @param b Date object.
     *
     *  @return 0 if <code>a</code> and <code>b</code>
     *  are <code>null</code> or equal;
     *  1 if <code>a</code> is <code>null</code>
     *  or before <code>b</code>;
     *  -1 if <code>b</code> is <code>null</code>
     *  or before <code>a</code>.
     */
    public static function dateCompare(a:Date, b:Date):int
    {
        if (a == null && b == null)
            return 0;

        if (a == null)
          return 1;

        if (b == null)
           return -1;

        var na:Number = a.getTime();
        var nb:Number = b.getTime();
       
        if (na < nb)
            return -1;

        if (na > nb)
            return 1;

        return 0;
    }

J'ai envie de dire que le stagiaire qui s'est chargé de passer sur toutes les méthodes pour les commenter n'a pas bien lu celle là avant de la commenter :p

Aucun commentaire:

Enregistrer un commentaire