Autres fonctionnalités

Avant de terminer, nous pouvons encore voir deux petites choses intéressantes concernant notre classe Carnet. Méthodes publiques et privées

Prenez Carnet#par_nom. Cette méthode est différente des autres sur un point très important: elle est utilisée à l’intérieur même de la classe. C’est ce qu’on appelle une méthode interne, ou privée.

Lorsque vous programmerez une méthode comme celle-ci, il est possible de la déclarer comme étant privée. Une méthode privée ne peut être appelée que par l’objet lui-même, et jamais par l’utilisateur. Une méthode normale (comme toutes celles que nous avons écrites), est appelée méthode publique.

Vous pouvez déclarer des méthodes en utilisant les mots clefs public et private. Quand vous ajoutez le mot clef private, toutes les méthodes définies à partir de là seront privées, jusqu’à ce que vous rajoutiez le mot clef public.

Par exemple :


class UneClasse
   # Par défaut, les méthodes sont publiques
   def methode1
       # ...
   end

 private   # Maintenant, les méthodes sont privées

   def methode2
       # ...
   end
   def methode3
       # ...
   end

 public   # Sauf celle-ci, qui sera publique

   def methode4
       # ...
   end
end    

Donc, dans notre carnet d’adresses, nous devons rajouter le mot clef private juste avant la définition de Carnet#par_nom :


class Carnet 
   #
   #  Méthodes fondamentales:
   #    initialize 
   #    ajoute 
   #    retire 
   #
   def initialize
       @personnes = []
   end

   # ...

 private   # Début des méthodes privées

   #  
   #  Fonction de tri. 
   #
   def par_nom(a, b)
       if  a.prenom == b.prenom
           a.nom <=> b.nom
       else
           a.prenom <=> b.prenom
       end 
   end
end

Ré-utilisation du code avec require

Nous avons passé beaucoup de temps à écrire les trois classes pour notre carnet d’adresses. Nous ne voulons pas copier et coller éternellement le code chaque fois que nous allons l’utiliser dans un programme. Fort heureusement, nous n’avons pas besoin de le faire.

Copiez le code des trois classes dans un fichier, et sauvez-le sous le nom carnet.rb. Maintenant, créez un nouveau fichier (dans le même répertoire) et tapez :


require 'carnet'

# Nicolas

adresse = Adresse.new

adresse.rue         = "Rue du port, 32" 
adresse.code_postal = "56000" 
adresse.ville       = "Vannes" 
adresse.pays        = "France" 

puts "Nicolas:" 
puts adresse

Sauvez-le sous le nom nicolas.rb par exemple. Maintenant, invoquez Ruby :

Vous l’aurez compris, le mot clef require permet de charger du code existant.

Écrire des itérateurs << | Apprenez Ruby | >> Écrire de bons programmes 4