Треки
/
Ruby
Ruby
/
Вправи
/
Остання воля
Остання воля

Остання воля

Навчальна вправа

Вступ

Важливий метод організації коду - це використання просторів імен. Класи та модулі надають простори імен. Два методи можуть мати конфлікт імен, який можна розвʼязати, розмістивши їх у різних просторах імен. Простори імен можуть бути вкладеними, що може допомогти структурувати великі кодові бази. Доступ до просторів імен здійснюється через оператор області видимості ::.

У наведеному нижче прикладі показано використання двох різних методів 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. Метод не має аргументів і спирається лише на інформацію у відповідних просторах імен родин.

Створено

  • @vaeng (оригінальна вправа на C++)
  • @vaiapatta1985 (перенесення на Ruby)
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Ruby Exercism

Час розпочати Остання воля?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Ruby, а також 21 концепція121 вправа та справжнє наставництво від людей, і все це безкоштовно.