مسیرها
/
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

دستورالعمل‌ها

شما در یک دفتر وکالت معتبر کار می‌کنید که در رسیدگی به درخواست‌های وصیت‌نامه‌ی منحصربه‌فرد تخصص دارد.

در این تمرین، می‌خواهید یک گاوصندوق مرموز را باز کنید. شما مجری وصیت هستید و رمزهای مخفی و دیرینه‌ی سه خانواده را کنار هم می‌گذارید تا یک شماره حساب و رمز متناظر آن را به دست آورید.

برای اینکه هیچ خانواده‌ای نتواند به‌تنهایی گاوصندوق را باز کند، این گاوصندوق تنها با ترکیب دانش آن خانواده‌ها با یک تعدیل‌کننده‌ی مخفی که شما از وصیت‌نامه می‌دانید باز می‌شود.

شما سه کار دارید که همه‌شان به کمک به خانواده‌ها برای باز کردن گاوصندوق مربوط می‌شوند.

1. در برابر خانواده‌ها بنشینید و مدارک‌تان را بچینید

یک فضای نام به اسم EstateExecutor تعریف کنید. کدی که در کارهای بعدی می‌نویسید باید در بدنه‌ی فضای نام EstateExecutor تعریف شود.

class SomeName
  # The space between the class/module name
  # and the `end` keyword
  # is called body of the  namespace.
end

2. شماره حساب مخفی را پیدا کنید

این لحظه‌ی بزرگ شماست. تنها شما کلید تعدیل‌کننده‌ی مخفی را دارید تا شماره حساب مخفی را آشکار کنید.

متدی به اسم assemble_account_number(secret_modifier) تعریف کنید که تعدیل‌کننده‌ی مخفی از نوع Integer را به عنوان آرگومان می‌گیرد و شماره حساب سرهم‌شده‌ی Integer را برمی‌گرداند.

برای به دست آوردن شماره‌ی درست، باید bank_number_part هر یک از این سه خانواده را با هم جمع کنید.

3. آخرین قدم: رمز مخفی را وارد کنید

دستورالعمل‌های وصیت‌نامه از شما می‌خواهند که همه‌ی قطعه‌های آبی و سپس همه‌ی قطعه‌های قرمز را جمع کنید. رمز حاصل از ضرب این دو مجموع در هم به دست می‌آید.

متدی به اسم assemble_code تعریف کنید که رمز حاصل را با ترکیب قطعه‌های سه خانواده در یک نتیجه‌ی واحد Integer برمی‌گرداند. این متد هیچ آرگومانی ندارد و تنها بر اطلاعات موجود در فضای نام‌های مربوط به هر خانواده تکیه می‌کند.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Ruby Exercism

آماده‌اید وصیت‌نامه را شروع کنید؟

در Exercism ثبت‌نام کنید تا Ruby را همراه با 21 مفهوم121 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.