Même si tout est un objet en Ruby, il existe des types de base qui sont déjà disponibles.

Strings (chaînes de caractères)

On peut définir un String de plusieurs manières :

puts "Hello!" → Hello
puts "Nous sommes #{8*4}" → Nous sommes 32
puts %Q{Des pourcentages!} → Des pourcentages!
 
mon_texte = <<REPERE
Un texte long qui
peut tenir
sur plusieurs lignes.
REPERE

La première méthode est tout simplement de mettre son texte entre des guillemets doubles. On peut utiliser des guillemets simples, mais ils offrent moins de caractères d’échapement donc c’est moins intéressant.

La deuxième méthode montre que l’on peut ajouter une expression Ruby (en l’occurence 8*4) pour qu’elle soit exécutée avant d’être transformée en texte.

La troisième méthode utilise %Q. C’est plutôt bizarre. Je pense que je vais vite l’oublier.

La quatrième méthode utilise un début (les <<) et deux délimiteurs (ici “REPERE”, mais on peut mettre ce que l’on veut). Ensuite, le texte délimité est restranscrit de la sorte, avec les sauts de ligne notamment (un peu comme une balise <pre>).

Dernière méthode non écrite ici: utiliser la méthode to_s.

Numbers

Il existe deux classes déjà définies : Fixnum et Bignum. Le premier est pour les nombres entre -230 et 230. Le second est pour tout le reste. On peut avoir des nombres en décimal, octal, hexadecimal et binaire.

Il y a aussi le type Float (bizarre comme nom) pour les nombres décimaux.

3.4 # C'est du Float

Ce qui est intéressant (et très lisible), c’est de pouvoir utiliser des méthodes sur des nombres (puisque tout est objet, même les nombres). J’ai beaucoup aimé cet exemple :

6.zero? → false

Collections

Une collection est un objet qui regroupe d’autre objets liés entre eux (par exemple, ce sont tous des chaînes de caractères).

Range (suite)

C’est une suite de nombres ou caractères. Pour les créer, au lieu de tous les écrire, on écrit le 1er et le dernier, séparés par 2 ou 3 points. Si on met 2 points, le dernier élément est inclus. Si on en met 3, il est exclus.

ma_suite = 2..7 # Dedans il y a 2,3,4,5,6 et 7
ma_suite = 2...7 # Dedans il y a 2,3,4,5 et 6, mais pas 7 car on a mis 3 petits points

Là encore, on peut appeler une méthode, par exemple .include?

ma_suite = 2..7
puts (ma_suite.include?(5))true

Array (tableau)

Comme pour d’autres langages, l’index commence à zéro. Mais une particularité est que les données à l’intérieur n’ont pas besoin d’être du même type. Pour créer un tableau, plusieurs façons :

mon_tableau = Array.new
mon_autre_tableau = ['france' , 'suisse' , 'angleterre']
mon_troisieme_tableau = [23 , 'chine' , (46*7).to_s]23 chine 322
mon_dernier_tableau = %W( il etait une fois )['il' , 'etait' , 'une' , 'fois']

1) On utilise la classe Array avec la méthode .new
2) On rentre les valeurs directement par crochet
3) Pareil que pour 2) mais on voit que l’on peut mettre des expressions directement
4) Encore ce % bizarre mais pratique car on gagne les guillemets

On peut aussi transformer un autre type d’objet en Array avec la méthode .to_a. Par exemple, si on a un Range :

ma_suite = [7..9]
mon_tableau = ma_suite.to_a[7,8,9]

Hash (tableau associatif)

Tout comme les Array, à part qu’on remplace les index par des valeurs. Donc on a des valeurs associées à d’autres valeurs.

mon_identite = { 'Nom' =&gt; 'Smith',
'Prenom' =&gt; 'John' }

Pour trouver une valeur, on appelle la clé:

mon_identite['Nom'] → Smith

Si on crée un nouveau Hash avec la méthode .new, on peut rajouter un paramètre qui n’est pas la première valeur mais la valeur retournée si la clé est vide!

mon_hash = Hash.new("C'est vide ici")
mon_hash['cle_non_existante'] → C'est vide ici

Là encore, quelques méthodes utiles :

mon_identite.has_key?('Nom')true
mon_identite.has_value?('Paul')false
mon_identite.empty? → false

Il y a pleins d’autres méthodes mais je n’ai pas encore lu l’API. J’irai piocher dedans ponctuellement. Et demain je parle des références des variables (toujours dans le chapitre 1 que je n’arrête pas de lire et piller…).