Les modules : Namespaces

Voir la vidéo
Description Sommaire

Les modules dans Ruby permettent de créer des groupes de méthodes que l'on pourra ensuite inclure dans nos différentes classes. Contrairement aux classes vu précédemment il n'est pas possible d'instancier un module ni d'utiliser l'héritage.

Syntaxe

La syntaxe est proche de celle des classes :

module Cercle

    PI = 3.141516

    def self.perimetre(rayon)
        2 * PI * rayon
    end

end

Cercle::PI # 3.141516
Cercle.perimetre(5)

Namespace

Les modules peuvent être utilisés de différentes manières. Une première utilisation consiste à utiliser les modules pour englober nos classes et fournir un système de namespace afin de ne pas risquer de collisions. En effet, si vous voulez créer une classe Date par exemple elle va rentrer en collision avec la classe Date de Ruby. Pour remédier au problème, on peut englober la définition de notre classe dans un module :

module Grafikart
    class Cercle

        def demo
            puts "Salut"
        end

    end
end

Grafikart::Cercle.new.demo # "Salut"

De la même façon vous pouvez avoir des modules dans des modules afin de mieux organiser votre code. Cela va dépendre de l'étendu de vos applications.

Diviser pour régner

Maintenant que nous avons vu que l'on peut organiser notre code dans des modules pour une meilleur organisation, on peut commencer à séparer notre code dans plusieurs fichiers. Ceci permet de ne pas se retrouver avec un fichier contenant des milliers de lignes, mais plutôt avec plusieurs petits fichiers remplissant chacun un rôle particulier. L'avantage de cette méthode est double :

  • En cas de problème dans un module ou une classe, on saura directement dans quel fichier chercher l'erreur
  • On pourra plus facilement réutiliser notre code en réutilisant ces briques.

Pour inclure un fichier il existe 2 méthodes :

  • require, permet d'inclure un fichier situé dans le loadpath de ruby (on reviendra dessus lorsque l'on parlera des gems)
  • require_relative, permet d'inclure un fichier relatif au fichier courrant
require 'date' # on inclue le système de date de Ruby
require_relative 'geometrie' # on inclue le fichier geometrie.rb qui contiendra nos classe / modules
Publié
Technologies utilisées
Auteur :
Grafikart
Partager