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 :
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 :
varPersonne=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(){returnthis._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.
[^] # Re: Lua
Posté par needs . En réponse à la dépêche Javascript comme langage par défaut pour GNOME. Évalué à -1.
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 paraet les pointeurs parp: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_apNamesest 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 :
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.