A kódszervezés fontos módja a névterek használata.
Az osztályok és a modulok névtereket biztosítanak.
Két metódus neve ütközhet, amit úgy oldhatsz fel, hogy különböző névterekbe teszed őket.
A névterek egymásba ágyazhatók, ami segíthet a nagy kódbázisok strukturálásában.
A névtereket a scope-resolution operátorral (::) éred el.
Az alábbi példa két különböző foo metódus használatát mutatja be.
Úgy használhatók együtt, hogy a nevük elé írod a megfelelő névteret.
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
Figyeld meg, hogy a névterek értelmezése attól függ, hol van az éppen végrehajtott kód.
Ha a root névtérben lévő valamire akarsz hivatkozni (azaz minden definiált névteren kívülre), kezdd a :: jellel.
Például:
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
Egy rangos ügyvédi irodánál dolgozol, amely arra szakosodott, hogy egyedi végrendeleti kérésekkel foglalkozzon.
Ebben a feladatban egy titokzatos széfet fogsz kinyitni. Te vagy a végrendeleti végrehajtó, és három család régóta őrzött titkos kódjait fogod összeállítani, hogy megkapd a bankszámlaszámot és a hozzá tartozó kódot.
Hogy egyetlen család se nyithassa ki egyedül a széfet, csak úgy lehet kinyitni, ha a tudásukat összekapcsolják egy titkos módosítóval, amelyet te a végrendeletből ismersz.
Három részfeladat vár rád, és mindegyik abban segít, hogy a családok kinyithassák a széfet.
Definiálj egy EstateExecutor nevű névteret.
A következő részfeladatok kódját az EstateExecutor névtér testében kell definiálni.
class SomeName
# The space between the class/module name
# and the `end` keyword
# is called body of the namespace.
end
Most jön a nagy pillanat. Csak nálad van a titkos módosító kulcs, amellyel felfedheted a titkos bankszámlaszámot.
Definiáld az assemble_account_number(secret_modifier) metódust, amely argumentumként veszi a Integer típusú titkos módosítót, és visszaadja az összeállított bankszámlaszámot Integer értékként.
Ahhoz, hogy megkapd a helyes számot, össze kell adnod mindhárom család bank_number_part értékét.
A végrendelet utasításai szerint először az összes kék, majd az összes piros töredéket kell összeadnod. A kapott kód a két összeg szorzata.
Definiáld az assemble_code metódust, amely a három család töredékeit egyetlen Integer eredménnyé összekapcsolva adja vissza a kapott kódot.
A metódusnak nincsenek argumentumai, és kizárólag a családok megfelelő névtereiben lévő információkra támaszkodik.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Ruby nyelvet 21 fogalom121 feladat segítségével, valódi emberi mentorálással, mindez ingyen.