Table des matières
À propos de ce chapitre
Vous venez d'apprendre comment créer vos propres structures de données. Dans ce dernier chapitre, nous passerons à la vitesse suivante, en transformant ces structures en classes (Adresse, Personne et Carnet), et en leur ajoutant des méthodes.
Ce seront de véritables classes Ruby, au même titre que Integer, String, Array ou Hash.
Créer ses propres classes procure quelques avantages intéressants:
Réutilisation du code:
Vous souvenez-vous du nombre de lignes qu'il a fallu écrire pour afficher le contenu du carnet d'adresses? N'aurait-il pas été plus joli d'écrire ce code quelque part, et d'ensuite appeler puts carnet chaque fois que nous désirions l'afficher?
C'est exactement ce que nous allons apprendre dans ce chapitre.
Abstraction des données:
Vous utilisez une classe en appelant ses méthodes. Le contenu de la classe en elle-même (l'implémentation des méthodes) vous est caché.
Savez-vous comment la classe String est fabriquée? Probablement pas, mais vous êtes néanmoins capable de l'utiliser.
Une fonction est une méthode qui n'est pas associée à un objet en particulier.
Vous avez déjà utilisé une fonction auparavant: puts. Remarquez bien la syntaxe:
puts "Salut!" # à la place de: un_objet.puts "Salut!"
Voici une fonction toute simple:
def bonjour puts "Bonjour monde!" end
Maintenant, nous avons défini la fonction bonjour. Le code qu'elle contient sera exécuté à chaque appel de la fonction. Un exemple:
def bonjour puts "Bonjour monde!" end bonjour bonjour
Qui produira:
Bonjour monde! Bonjour monde!
Comme vous pouvez dès à présent le constater, les fonctions peuvent servir à réutiliser du code facilement.
Vous savez déjà qu'il est possible de passer des paramètres aux méthodes et fonctions. Mais vous ne savez pas encore comment faire!
Voici la fonction bonjour légèrement améliorée:
def bonjour(nom) puts "Bonjour " + nom + ", comment vas-tu" end bonjour("Laurent") bonjour "Stéfanie"
Ce qui produira:
Bonjour Laurent, comment vas-tu? Bonjour Stéfanie, comment vas-tu?
Écrivons maintenant une fonction un peu plus utile. Souvenez-vous des structures d'adresses du chapitre précédent:
# Adresse de Nicolas adresse_de_nicolas = { "rue" => "Rue du port, 32", "code postal" => "56000", "ville" => "Vannes", "pays" => "France" } # Adresse de François adresse_de_francois = { "rue" => "Avenue de la tranchée, 14", "code postal" => "1000", "ville" => "Bruxelles", "pays" => "Belgique" }
Voici le code d'une fonction qui permet de les afficher à l'écran:
def affiche_adresse(adresse) code_postal = adresse["code postal"] ville = adresse["ville"] puts " " + adresse["rue"] puts " " + code_postal + ", " + ville puts " " + adresse["pays"] end
Maintenant, nous pouvons facilement afficher des adresses:
puts "Nicolas:" affiche_adresse(adresse_de_nicolas) puts "François:" affiche_adresse(adresse_de_nicolas)
Ce qui produira à l'écran:
Nicolas: Rue du port, 32 56000, Vannes France François: Rue du port, 32 56000, Vannes France