Важливий метод організації коду - це використання просторів імен.
Класи та модулі надають простори імен.
Два методи можуть мати конфлікт імен, який можна розвʼязати, розмістивши їх у різних просторах імен.
Простори імен можуть бути вкладеними, що може допомогти структурувати великі кодові бази.
Доступ до просторів імен здійснюється через оператор області видимості ::.
У наведеному нижче прикладі показано використання двох різних методів foo.
Їх використовують разом, додаючи відповідні простори імен як префікс.
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
Зауважмо, що простори імен інтерпретуються залежно від того, де перебуває код, який виконується.
Щоб звернутися до чогось у кореневому просторі імен (тобто поза всіма визначеними просторами імен), треба почати з ::.
Наприклад:
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
Ми працюємо в престижній юридичній фірмі, яка спеціалізується на незвичайних запитах щодо заповітів.
У цій вправі ми відкриємо таємниче сховище. Ми виконуємо обовʼязки виконавця заповіту та зберемо секретні коди трьох родин, які довго зберігалися в таємниці, щоб отримати номер рахунку та відповідний код.
Щоб жодна родина не могла відкрити сховище самостійно, відкрити його можна лише, поєднавши їхні знання із секретним модифікатором, який нам відомий із заповіту.
На нас чекають три завдання, і всі вони повʼязані з тим, щоб допомогти родинам відкрити сховище.
Визначте простір імен EstateExecutor.
Код із наступних завдань потрібно визначити в тілі простору імен EstateExecutor.
class SomeName
# The space between the class/module name
# and the `end` keyword
# is called body of the namespace.
end
Це наш зоряний час. Лише в нас є секретний ключ-модифікатор, щоб розкрити секретний номер рахунку.
Визначте метод assemble_account_number(secret_modifier), який приймає секретний модифікатор типу Integer як аргумент і повертає зібраний номер рахунку типу Integer.
Щоб отримати правильний номер, потрібно підсумувати bank_number_part кожної з трьох родин.
У заповіті нас просять додати спочатку всі сині, а потім усі червоні фрагменти. Підсумковий код отримуємо, перемноживши обидві суми.
Визначте метод assemble_code, який повертає підсумковий код, поєднуючи фрагменти від трьох родин в один результат типу Integer.
Метод не має аргументів і спирається лише на інформацію у відповідних просторах імен родин.
Зареєструйтеся на Exercism, щоб вивчати й опановувати Ruby, а також 21 концепція121 вправа та справжнє наставництво від людей, і все це безкоштовно.