المسارات
/
Ruby
Ruby
/
التمارين
/
ميناء باليرمو
ميناء باليرمو

ميناء باليرمو

تمرين تعلّمي

مقدمة

الرموز هي معرّفات مُسمّاة يمكن استخدامها للإشارة إلى قيمة. تُنشأ الرموز من خلال قيمة حرفية للرمز، وهي كتابة النقطتين : قبل الاسم، مثل :foo. ويمكن أيضًا كتابتها بين علامتي تنصيص، مثل :"foo"، وهو ما يسمح مثلًا بوجود مسافات في الاسم.

:foo # => :foo
:"foo boo" # => :"foo boo"

تُستخدم الرموز في مواضع كثيرة من اللغة، بما في ذلك كمفاتيح في جداول التجزئة، ولتمثيل أسماء الطرق وأسماء المتغيرات.

المعرّف

ما يميّز الرموز عن السلاسل النصية أنها معرّفات، ولا تمثّل بيانات أو نصًا. وهذا يعني أن رمزين يحملان الاسم نفسه هما دائمًا الكائن نفسه.

"foo".object_id # => 60
"foo".object_id # => 80
:foo.object_id # => 1086748
:foo.object_id # => 1086748

تعديل الرموز

الرموز غير قابلة للتعديل، أي أنه لا يمكن تغييرها. وهذا يعني أنك حين "تعدّل" رمزًا فأنت في الحقيقة تنشئ رمزًا جديدًا. هناك بعض الطرق التي يمكن استخدامها للتعامل مع الرموز، وكلها تُرجع رموزًا جديدة. ويمكن العثور على جميع الطرق في واجهة API الخاصة بالرمز.

:foo.upcase # => :FOO

:foo.object_id # => 1086748
:foo.upcase.object_id # => 60

وميزة كون الرموز غير قابلة للتعديل أنها أكثر كفاءة في استخدام الذاكرة من السلاسل النصية، كما أنها أكثر أمانًا عند استخدامها كمعرّفات.

التحويل

يمكن تحويل الرموز إلى سلاسل نصية والعكس. ويفيد ذلك عندما تريد تعديل رمز، أو عندما تريد استخدام رمز كسلسلة نصية. لعرض سلسلة نصية كرمز يمكنك استخدام الطريقة String#to_sym، وللقيام بالعكس يمكنك استخدام الطريقة Symbol#to_s. ولأن الرموز تمتلك مجموعة محدودة من الطرق، فقد يفيد تحويل الرمز إلى سلسلة نصية لتطبيق طرق السلاسل النصية عليه، إن كنت بحاجة إلى رمز جديد.

:foo.to_s # => "foo"
"foo".to_sym # => :foo

التعليمات

ميناء باليرمو مرفأ مزدحم، تدخله سفن كثيرة وتغادره. وقد اعتمد لزمن طويل على نظام يدوي لتتبّع السفن الموجودة في المرفأ حاليًا. هذا النظام كثير الأخطاء، لذلك قرّر رئيس المرفأ استبداله بنظام حاسوبي.

وقد استعان رئيس المرفأ بك لتنفيذ النظام الجديد. وينبغي أن يتعامل النظام مع معرّفات السفن وكذلك معرّفات الوجهات.

1. أنشئ معرّف الميناء

أول ما عليك فعله هو إنشاء معرّف ميناء باليرمو. يتكوّن المعرّف من الأحرف الأربعة الأولى من اسم الميناء، مكتوبة بأحرف كبيرة.

عرّف الثابت Port::IDENTIFIER ليكون رمزًا قيمته :PALE.

Port::IDENTIFIER 
# => :PALE

2. احصل على معرّفات موانئ أخرى

سيتعامل البرنامج أيضًا مع موانئ أخرى، لذلك تحتاج إلى إنشاء معرّفات لها كذلك. ويريد الميناء أن يصبح النظام آليًا، ولأن الموانئ تستخدم أنماط تسمية مختلفة، ينبغي توليد المعرّفات من اسم الميناء. ويتكوّن المعرّف من الأحرف الأربعة الأولى من اسم الميناء، مكتوبة بأحرف كبيرة.

عرّف الطريقة Port.get_identifier بحيث تأخذ سلسلة نصية كوسيط، وتُرجع معرّف ذلك الميناء كرمز.

Port.get_identifier("Hamburg") 
# => :HAMB

3. حدّد المحطة التي ينبغي أن ترسو عندها السفينة

للميناء محطتان، ويحتاج النظام إلى تحديد المحطة التي ينبغي أن ترسو عندها السفينة. وتُحدَّد المحطة بناءً على معرّف السفينة.

يتكوّن المعرّف من جزأين: الجزء الأول مكوّن من 3 أحرف كبيرة تدل على الحمولة التي تحملها السفينة، ثم 3 أرقام هي المعرّف الفريد للسفينة.

إذا كانت السفينة تحمل OIL أو GAS فينبغي أن ترسو عند المحطة A. وإلّا فترسو عند المحطة B.

عرّف الطريقة Port.get_terminal بحيث تأخذ رمزًا كوسيط، وهو معرّف السفينة. وينبغي أن تُرجع الطريقة المحطة كرمز.

Port.get_terminal(:OIL123)
# => :A
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Ruby Exercism

مستعد لبدء ميناء باليرمو؟

سجّل في Exercism لتتعلّم وتتقن Ruby عبر 21 مفهومًا121 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.