Autres fonctionnalités

Avant de terminer, nous pouvons encore voir deux petites choses intéressantes concernant notre classe Carnet.

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

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.