• [^] # Re: Lua

    Posté par . En réponse à la dépêche Javascript comme langage par défaut pour GNOME. Évalué à -1.

    Bof, dans beaucoup de langages avec "vrai" encapsulation, si tu veux tu peux la contourner, c'est juste un peu plus difficile qu'avec une convention de nommage..

    Mais avant de le faire, tu te pose des questions, l'intérêt est là.
    Les conventions de nommages c'est dans la majorité des cas une mauvaise idée :
    Dans le code de teeworlds par exemple, les membres d'une classe commencent par m_, les tableaux par a et les pointeurs par p :

    /* src/game/gamecore.h */
    class CTuningParams
    {
     static const char *m_apNames[];
     /* ... */
    }
    
    

    D'une part c'est lourd, d'autre part l'information est dupliquée et sans grand intérêt. Enfin elle est incomplète : pour rester cohérent, il faudrait aussi préciser que m_apNames est un tableau de pointeurs sur une chaine chaine constante
    …Ah mais attend un peu, la convention indique aussi qu'il faut mettre s_ quand l'attribut est static ! Compliqué à respecter, sans gain notable, c'est une mauvaise idée.

    Autre exemple en Javascript :

    var Personne = function(nom) {
     this._nom = nom.toUpperCase(); /* Par convention '_nom' est privé */
    }
    Personne.prototype = {
     /* Par convention, le nom est seulement accessible en lecture */
     get_nom: function() {
     return this._nom;
     }
    }
    
    

    C'est tellement facile de passer outre que si quelqu'un utilisant ton code veut changer le nom, il écrira sans trop ce poser de questions : jean._nom = 'Garcia';.

    Aucune erreur, le code semble marcher, on passe à autre chose.
    Sauf qu'ici, à titre d'exemple, le nom est mis en majuscule, ce qui n'est pas le cas en écrivant l'attribut directement. L'application est devenue incohérente (on pourrait imaginer des bugs plus sournois, que l'on détectera plus tard et qui nous feront perdre beaucoup de temps).
    Si la visibilité de l'attribut _nom était vraiment restreinte, le développeur aurait eu une erreur et aurait analysé le pourquoi du comment, ce qui aurait au moins le mérite de le forcer à remettre en cause son approche.