يُعد استخدام مساحات الأسماء أسلوبًا مهمًا لتنظيم الكود.
توفر الأصناف والوحدات مساحات الأسماء.
قد يحدث تضارب في التسمية بين طريقتين، ويمكن حله بوضعهما في مساحات أسماء مختلفة.
يمكن أن تتداخل مساحات الأسماء، مما قد يساعد في هيكلة قواعد أكواد كبيرة.
يتم الوصول إلى مساحات الأسماء عبر عامل تحديد النطاق ::.
يوضح المثال أدناه استخدام طريقتين مختلفتين باسم 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 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.