Eine wichtige Methode, um Code zu organisieren, ist die Verwendung von Namensräumen.
Klassen und Module stellen Namensräume bereit.
Zwei Methoden können einen Namenskonflikt haben, den du auflöst, indem du sie in verschiedene Namensräume packst.
Namensräume lassen sich verschachteln, was helfen kann, große Codebasen zu strukturieren.
Der Zugriff auf die Namensräume erfolgt über den Operator :: zur Auflösung des Gültigkeitsbereichs.
Das folgende Beispiel zeigt die Verwendung von zwei verschiedenen foo-Methoden.
Sie werden zusammen verwendet, indem du jeweils ihren Namensraum voranstellst.
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
Beachte, dass Namensräume davon abhängen, wo sich der ausgeführte Code befindet.
Um auf etwas im Wurzelnamensraum zu verweisen (also außerhalb aller definierten Namensräume), beginne mit ::.
Zum Beispiel:
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
Du arbeitest für eine renommierte Anwaltskanzlei, die sich auf außergewöhnliche Testamentsanfragen spezialisiert hat.
In dieser Übung öffnest du einen geheimnisvollen Tresor. Du bist der Testamentsvollstrecker und setzt die lange gehüteten Geheimcodes von drei Familien zusammen, um eine Kontonummer und den passenden Code zu erhalten.
Damit keine Familie den Tresor allein öffnen kann, lässt er sich nur öffnen, indem man ihr Wissen mit einem geheimen Modifikator kombiniert, den du aus dem letzten Willen kennst.
Du hast drei Aufgaben, die alle dazu dienen, den Familien beim Öffnen des Tresors zu helfen.
Definiere einen Namespace namens EstateExecutor.
Der Code aus den nächsten Aufgaben sollte im Body des Namespace EstateExecutor definiert werden.
class SomeName
# The space between the class/module name
# and the `end` keyword
# is called body of the namespace.
end
Das ist dein großer Moment. Nur du hast den geheimen Modifikatorschlüssel, um die geheime Kontonummer zu enthüllen.
Definiere die Methode assemble_account_number(secret_modifier), die den geheimen Modifikator vom Typ Integer als Argument entgegennimmt und die zusammengesetzte Kontonummer als Integer zurückgibt.
Um die richtige Nummer zu erhalten, musst du die bank_number_part von jeder der drei Familien aufsummieren.
Die Anweisungen im Testament verlangen, dass du zuerst alle blauen und dann alle roten Fragmente addierst. Den resultierenden Code erhältst du, indem du beide Summen multiplizierst.
Definiere die Methode assemble_code, die den resultierenden Code zurückgibt, indem sie die Fragmente der drei Familien zu einem einzigen Integer-Ergebnis kombiniert.
Die Methode hat keine Argumente und stützt sich allein auf die Informationen in den relevanten Namespaces der Familien.
Melde dich bei Exercism an, um Ruby mit 21 Konzepte121 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.