07. Tableaux et Itérateurs
Écrivons un programme qui nous permet de taper autant de mots que nous le voulons (un mot par ligne, jusqu'à ce que nous appuyions simplement sur Entrée sur une ligne vide), et qui nous répète ensuite les mots dans l'ordre alphabétique ? Essayez d'écrire ce programme...
...
L'avez-vous fait ? Vous avez probablement eu des difficultés. Comment stocker tous ces mots ? Vous ne savez pas combien il y en aura. Vous ne pouvez pas simplement créer un tas de variables (mot1, mot2, etc.), car l'utilisateur pourrait taper plus de mots que vous ne l'aviez prévu.
Nous avons besoin d'un moyen de stocker une liste de choses, sans savoir combien de choses il y a. Nous avons besoin de Tableaux (Arrays).
Un tableau est juste une liste dans votre ordinateur. Chaque emplacement dans la liste agit comme une variable : vous pouvez voir vers quel objet un emplacement particulier pointe, et vous pouvez le faire pointer vers un objet différent. Créons un tableau :
[]
[5]
['Bonjour', 'Au revoir']
saveur = 'vanille'
[89.9, saveur, [true, false]]
D'abord, nous avons un tableau vide, puis un tableau avec un seul nombre, puis un avec deux chaînes. Ensuite, nous avons une simple affectation de variable ; puis un tableau avec trois objets : un flottant, la variable saveur, et un autre tableau.
Pour nous aider à trouver des choses dans les tableaux, chaque emplacement reçoit un numéro d'index. Les programmeurs (et la plupart des langages de programmation, y compris Ruby) commencent à compter à partir de zéro, donc le premier emplacement dans le tableau est l'emplacement zéro.
noms = ['Ada', 'Belle', 'Chris']
puts noms
puts noms[0]
puts noms[1]
puts noms[2]
puts noms[3] # Ceci est hors de portée.
Ada
Belle
Chris
Ada
Belle
Chris
nil
Nous voyons que puts noms imprime chaque nom dans le tableau noms. Ensuite, nous utilisons noms[0] pour voir ce qu'il y a dans "l'emplacement zéro", noms[1] pour "l'emplacement un", et ainsi de suite. Quand nous avons essayé noms[3], Ruby nous a donné nil. nil est la façon de Ruby de dire "rien". Lorsque vous essayez d'accéder à un emplacement qui n'existe pas, vous obtenez nil.
La Méthode each
each (chaque) nous permet de faire quelque chose pour chaque objet vers lequel le tableau pointe. Si nous voulons dire quelque chose de gentil sur chaque langue dans un tableau, nous ferions ceci :
langues = ['English', 'Norwegian', 'Ruby']
langues.each do |lang|
puts 'J\'aime ' + lang + ' !'
puts 'Pas vous ?'
end
puts 'Et voyons ce qu\'il en est pour C++ !'
puts '...'
J'aime English !
Pas vous ?
J'aime Norwegian !
Pas vous ?
J'aime Ruby !
Pas vous ?
Et voyons ce qu'il en est pour C++ !
...
Que s'est-il passé ici ? langues.each est une méthode qui agit comme une boucle. Le code entre do et end est exécuté pour chaque élément du tableau. La partie |lang| est la façon dont nous donnons un nom à l'objet actuel (l'objet vers lequel each pointe à ce moment-là). La première fois, lang pointe vers 'English', la deuxième fois vers 'Norwegian', et ainsi de suite.
C'est ce qu'on appelle un Itérateur. Les itérateurs sont comme des boucles, mais ce sont des méthodes qui agissent sur des listes de choses.
Plus de Méthodes de Tableau
Nous avons appris [], each, et length (qui fonctionne sur les tableaux tout comme sur les chaînes). Nous avons aussi join, push, pop, et sort.
join (joindre) prend un tableau de chaînes et les joint ensemble en une seule chaîne :
aliments = ['artichaut', 'brioche', 'caramel']
puts aliments
puts
puts aliments.to_s
puts
puts aliments.join(', ')
puts
puts aliments.join(' :) ') + ' 8)'
artichaut
brioche
caramel
["artichaut", "brioche", "caramel"]
artichaut, brioche, caramel
artichaut :) brioche :) caramel 8)
push (pousser) et pop (éclater/retirer) sont des opposés. push ajoute un objet à la fin du tableau, et pop retire le dernier objet du tableau (et vous dit quel objet c'était).
favoris = []
favoris.push 'la pluie sur la fenetre'
favoris.push 'du whisky pour les chatons'
puts favoris[0]
puts favoris.last
puts favoris.length
puts favoris.pop
puts favoris
puts favoris.length
la pluie sur la fenetre
du whisky pour les chatons
2
du whisky pour les chatons
la pluie sur la fenetre
1
Quelques Petites Choses à Essayer
- Écrivez le programme que nous avons demandé au début de ce chapitre. Indice : il existe une méthode charmante pour les tableaux appelée
sort(trier). Utilisez-la ! - Essayez d'écrire le programme ci-dessus sans utiliser la méthode
sort. Une grande partie de la programmation consiste à résoudre des problèmes de tri. - Réécrivez votre programme de Table des Matières (du chapitre sur les méthodes). Commencez le programme avec un tableau contenant toutes les informations pour votre Table des Matières (noms des chapitres, numéros de page, etc.). Ensuite, imprimez le tout dans une boucle joliment formatée.
Maintenant que nous avons appris les tableaux et les itérateurs, nous sommes prêts à commencer à écrire nos propres méthodes !