Ruby identifie par des noms spéciaux certaines choses que nous connaissons déjà. Par exemple, il utilise le mot Float («flottant») pour représenter un nombre décimal. Voici quelques autres définitions:
Object («objet»): Ce n'est rien d'autre qu'un bout de données. Par exemple, le nombre 3 ou la chaîne de caractères "Salut!" sont des objets.
Class («classe»): Ruby sépare toujours les types de données en classes. Par exemple, les entiers, les flottants et les chaînes de caractères sont représentés par des classes différentes.
Method («méthode»): Les méthodes sont des bouts de code qui peuvent travailler sur des objets. Par exemple, l'opérateur + (qui permet d'additionner deux objets, souvent des entiers ou des chaînes) est bel et bien une méthode.
Voici la liste des classes Ruby associées aux types de données que vous venez de découvrir:
Tableau 1.3. Types de données et leur classes
Type de donnée | Classe associée |
---|---|
nombre entier | Integer |
nombre décimal | Float |
texte | String |
Souvenez-vous, vous avez également utilisé plusieurs méthodes associées à ces classes:
Tableau 1.4. Classes et quelques méthodes
Classe | Quelques méthodes |
---|---|
Integer | +, -, /, *, %, ** |
Float | +, -, /, *, %, ** |
String | capitalize, reverse, length, upcase, +, * |
Soyez certain de bien comprendre la différence entre une classe et un objet. Un objet, c'est une donnée quelconque. Une classe, c'est la structure de l'objet, ce à quoi il ressemble, ce qui le différencie des autres objets.
Par exemple, 3 et 5 sont des nombres différents. Ce sont donc des objets différents. Mais ce sont tous deux des nombres entiers, donc ils appartiennent à la même classe («Integer»). Voici quelques exemples:
Souvenez-vous, différentes classes peuvent avoir différentes méthodes. Voici quelques différences que nous avons déjà remarqué dans ce chapitre:
L'opérateur de division (/) ne fonctionne pas de la même façon avec des entiers et des flottants.
L'opérateur d'addition (+) se comporte différemment avec des nombres et des chaînes de caractères. Il peut servir à calculer le résultat de l'addition de deux nombres, et il peut également concaténer deux chaînes de caractères.
Les chaînes de caractères possèdent plusieurs méthodes que les entiers et les flottants n'ont pas. Par exemple: capitalize, length, upcase, etc..
Pour cette raison, nous utiliserons la notation Classe#méthode pour identifier exactement de quelle méthode nous parlerons. Par exemple, nous dirons Integer#+ afin de différencier cette méthode de Float#+ et de String#+. Nous pouvons également affirmer que String#upcase existe, mais que Integer#upcase n'existe pas.
Voici quelques méthodes permettant d'effectuer des conversions pour les trois classes que nous venons d'étudier:
Tableau 1.6. Méthodes de conversions entre classes
Méthode | Conversion | |
---|---|---|
D'un(e) | Vers un(e) | |
String#to_i | Chaine de caractères | Entier |
String#to_f | Chaîne de caractères | Flottant |
Float#to_i | Flottant | Entier |
Float#to_s | Flottant | Chaîne de caractères |
Integer#to_f | Entier | Flottant |
Integer#to_s | Entier | Chaîne de caractères |
Un petit exemple pratique avec notre ami IRB:
Vous pouvez demander à Ruby si un objet est issu d'une classe particulière. Essayez ceci dans l'interpréteur:
12.is_a?(Integer) 12.is_a?(Float) 12.is_a?(String) '12'.is_a?(Integer) '12'.is_a?(Float) '12'.is_a?(String) 12.0.is_a?(Integer) 12.0.is_a?(Float) 12.0.is_a?(String)
Essayez également ceci:
12 + 12 '12' + '12' '12'.to_i + 12 '12' + 12.to_s 12 * 12 '12' * 12
Avez-vous obtenu les résultats que vous espériez?
Comment expliqueriez-vous la différence entre 12, '12' et 12.0 à un enfant?