Testament

Testament

Exercice d'apprentissage

Introduction

Espaces de noms

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

Instructions

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.

1. Prends place devant les familles et étale tes papiers

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

2. Trouve le numéro de compte secret

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.

3. Dernière étape : saisis le code secret

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.

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Ruby Exercism

Prêt à commencer Testament ?

Inscris-toi sur Exercism pour apprendre et maîtriser Ruby avec 21 concepts121 exercices, et un vrai mentorat humain, le tout gratuitement.