Um método importante para organizar o código é o uso de namespaces.
Classes e módulos fornecem namespaces.
Dois métodos podem ter uma colisão de nomes, que pode ser resolvida colocando-os em namespaces diferentes.
Os namespaces podem ser aninhados, o que pode ajudar a estruturar grandes bases de código.
O acesso aos namespaces é feito pelo operador de resolução de escopo ::.
O exemplo abaixo mostra o uso de dois métodos foo diferentes.
Eles são usados juntos ao prefixar seus respectivos namespaces.
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
Repare que a interpretação dos namespaces depende de onde está o código em execução.
Para se referir a algo no namespace raiz (ou seja, fora de todos os namespaces definidos), comece com ::.
Por exemplo:
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
Você trabalha em um escritório de advocacia de prestígio, especializado em cuidar de pedidos de testamento incomuns.
Neste exercício, você vai abrir um cofre misterioso. Você é o testamenteiro e vai reunir os códigos secretos guardados há muito tempo por três famílias para obter um número de conta e o código correspondente.
Para impedir que qualquer família abra o cofre sozinha, ele só pode ser aberto combinando o conhecimento delas com um modificador secreto que você conhece do testamento.
Você tem três tarefas, todas relacionadas a ajudar as famílias a abrir o cofre.
Defina um namespace chamado EstateExecutor.
O código das próximas tarefas deve ser definido no corpo do namespace EstateExecutor.
class SomeName
# The space between the class/module name
# and the `end` keyword
# is called body of the namespace.
end
Este é o seu grande momento. Só você tem a chave modificadora secreta para revelar o número secreto da conta.
Defina o método assemble_account_number(secret_modifier), que recebe o modificador secreto do tipo Integer como argumento e retorna o número de conta montado, do tipo Integer.
Para obter o número correto, você precisa somar o bank_number_part de cada uma das três famílias.
As instruções do testamento pedem que você some todos os fragmentos azuis e depois todos os vermelhos. O código resultante é obtido multiplicando as duas somas.
Defina o método assemble_code, que retorna o código resultante combinando os fragmentos das três famílias em um único resultado do tipo Integer.
O método não tem nenhum argumento e depende apenas das informações nos namespaces relevantes das famílias.
Crie sua conta no Exercism para aprender e dominar Ruby com 21 conceitos121 exercícios e mentoria humana de verdade, tudo de graça.