Un metodo importante per organizzare il codice è l'uso dei namespace.
Le classi e i moduli forniscono namespace.
Due metodi potrebbero avere una collisione di nomi. Si può risolvere mettendoli in namespace diversi.
I namespace possono essere annidati, il che può aiutare a strutturare codebase di grandi dimensioni.
Si accede ai namespace tramite l'operatore di risoluzione dello scope ::.
L'esempio seguente mostra l'uso di due metodi foo diversi.
Vengono usati insieme anteponendo i rispettivi namespace.
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
Tieni presente che i namespace vengono interpretati in base a dove si trova il codice in esecuzione.
Per fare riferimento a qualcosa nel namespace root, cioè al di fuori di tutti i namespace definiti, inizia con ::.
Per esempio:
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
Lavori per un prestigioso studio legale specializzato in richieste testamentarie particolari.
In questo esercizio aprirai una misteriosa cassaforte. Sei l'esecutore testamentario e metterai insieme i codici segreti custoditi a lungo da tre famiglie per ottenere un numero di conto e il codice corrispondente.
Per evitare che una famiglia possa aprire la cassaforte da sola, la si può aprire solo combinando le loro conoscenze con un modificatore segreto che conosci dal testamento.
Hai tre attività, tutte legate ad aiutare le famiglie ad aprire la cassaforte.
Definisci un namespace chiamato EstateExecutor.
Il codice delle attività successive va definito nel corpo del namespace EstateExecutor.
class SomeName
# The space between the class/module name
# and the `end` keyword
# is called body of the namespace.
end
Questo è il tuo grande momento. Solo tu possiedi la chiave del modificatore segreto per rivelare il numero di conto segreto.
Definisci il metodo assemble_account_number(secret_modifier), che prende come argomento il modificatore segreto di tipo Integer e restituisce il numero di conto composto, di tipo Integer.
Per ottenere il numero corretto, devi sommare il bank_number_part di ciascuna delle tre famiglie.
Le istruzioni del testamento ti chiedono di sommare prima tutti i frammenti blu e poi tutti quelli rossi. Il codice risultante si ottiene moltiplicando le due somme.
Definisci il metodo assemble_code, che restituisce il codice risultante combinando i frammenti delle tre famiglie in un unico risultato di tipo Integer.
Il metodo non ha argomenti e si basa esclusivamente sulle informazioni contenute nei namespace pertinenti delle famiglie.
Iscriviti a Exercism per imparare e padroneggiare Ruby con 21 concetti121 esercizi e il mentoring di persone reali, tutto gratis.