PRATIQUE OUTILS 
Expliquez-moi : les symboles du langage Ruby
 
Loin d'être seulement une amélioration cosmétique, les symboles permettent de ne stocker en mémoire qu'une instance du nom d'une variable, économisant celle-ci pour des utilisations plus fondamentales. (19/10/2006)
  Forum

Réagissez dans les forums de JDN Développeurs

Le langage Ruby introduit nombre d'idiomes pour rendre son code plus rapide à écrire et à déchiffrer. Parmi ceux-ci, les symboles restent méconnus des développeurs, qui ne voient en eux (caractère, deux-points, etc.) qu'une représentation en mémoire de la variable qu'il précède, peu ou prou.

:mot, en Ruby, est l'équivalent exact de l'appel de méthode "mot".to_sym. De la même manière, :"ceci est une phrase" est le symbole de la chaîne "ceci est une phrase". Convertit en entier, le symbole renvoit l'identifiant en mémoire de la chaîne :

puts :"logiciel libre"      # affiche "logiciel libre"
puts :"logiciel libre".to_s # idem, mais conversion explicite
puts :"logiciel libre".to_i # affiche l'identifiant mémoire, un entier


Cet identifiant reste le même pour toute la durée de vie du programme, et ne peut être modifié. On voit ici qu'un symbole correspond autant à la chaîne qu'il désigne, qu'à sa référence en mémoire.

Un symbole équivaut donc à une chaîne, mais sa "symbolisation" lui confère une propriété supplémentaire : il ne peut y avoir dans un programme qu'un seul symbole portant un nom donné. Une comparaison entre deux symboles de chaînes va, de fait, beaucoup plus vite (seules les références des symboles sont comparées, plutôt que la chaîne entière), et on est sûr qu'un élément donné n'existe qu'une seule fois en mémoire.

En interne, les symboles sont utilisés pour implémenter des noms de méthodes, et les programmeurs s'en servent souvent pour construire des énumérations nommées. Plus largement, les symboles sont utilisé pour réutiliser un nombre illimité de fois le même mot ou la même phrase, qu'importe son emplacement. Une variable peut avoir différentes valeurs selon la méthode, la partie du programme ou autre, mais tant qu'elle est appellé à partir d'un symbole, la mémoire ne contient qu'une instance de ce mot/cette phrase.

Cela ne veut pas dire que le développeur peut faire le code suivant :

 :maVariable = 424242

Un symbole, une fois défini, ne peut être modifié : il agit comme une constante universelle. Il est mis en place par le simple usage du deux-points devant la chaîne à utiliser, et n'a donc pas besoin d'être déclaré ni de se voir assigner une valeur.

 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page