Une méthode importante pour organiser le code consiste à utiliser des espaces de noms.
Les classes et les modules fournissent des espaces de noms.
Deux méthodes peuvent entrer en collision de nom, ce que l'on peut résoudre en les plaçant dans des espaces de noms différents.
Les espaces de noms peuvent être imbriqués, ce qui peut aider à structurer de grandes bases de code.
On accède aux espaces de noms via l'opérateur de résolution de portée ::.
L'exemple ci-dessous montre l'utilisation de deux méthodes foo différentes.
Elles sont utilisées ensemble en préfixant chacune par son espace de noms respectif.
class MyNamespace
def self.foo
44
end
class MyInnerNamespace
def self.baz
90
end
end
end
class MyOtherNamespace
def self.foo
-2
end
end
p MyNamespace::foo + MyOtherNamespace::foo * MyNamespace::MyInnerNamespace::baz # => -136
Note que les espaces de noms sont interprétés en fonction de l'endroit où se trouve le code qui s'exécute.
Pour faire référence à un élément de l'espace de noms racine (c'est-à-dire en dehors de tous les espaces de noms définis), commence par ::.
Par exemple :
class Example
def self.example
5
end
end
class MyNamespace
class Example
def self.example
10
end
end
def self.call_example
p Example::example # => 10
p ::Example::example # => 5
end
end
Tu travailles pour un prestigieux cabinet d'avocats spécialisé dans le traitement de demandes testamentaires particulières.
Dans cet exercice, tu vas ouvrir un coffre mystérieux. Tu es l'exécuteur testamentaire et tu vas assembler les codes secrets, gardés depuis longtemps par trois familles, pour obtenir un numéro de compte et le code correspondant.
Pour empêcher une famille d'ouvrir le coffre seule, celui-ci ne peut être ouvert qu'en combinant leurs connaissances avec un modificateur secret que tu connais d'après le testament.
Tu as trois tâches, toutes liées à l'aide que tu apportes aux familles pour ouvrir le coffre.
Définis un espace de noms appelé EstateExecutor.
Le code des tâches suivantes doit être défini dans le corps de l'espace de noms EstateExecutor.
class SomeName
# The space between the class/module name
# and the `end` keyword
# is called body of the namespace.
end
C'est ton grand moment. Toi seul détiens le modificateur secret qui permet de révéler le numéro de compte secret.
Définis la méthode assemble_account_number(secret_modifier) qui prend en argument le modificateur secret sous forme d'Integer et renvoie le numéro de compte assemblé, lui aussi de type Integer.
Pour obtenir le bon numéro, tu dois additionner le bank_number_part de chacune des trois familles.
Les instructions du testament te demandent d'additionner d'abord tous les fragments bleus, puis tous les fragments rouges. On obtient le code résultant en multipliant les deux sommes.
Définis la méthode assemble_code qui renvoie le code résultant en combinant les fragments des trois familles en un seul résultat de type Integer.
La méthode ne prend aucun argument et s'appuie uniquement sur les informations contenues dans les espaces de noms correspondants des familles.
Inscris-toi sur Exercism pour apprendre et maîtriser Ruby avec 21 concepts121 exercices, et un vrai mentorat humain, le tout gratuitement.