المسارات
/
Crystal
Crystal
/
التمارين
/
روبوت الحفلة
روبوت الحفلة

روبوت الحفلة

تمرين تعلّمي

مقدمة

تمتلك Crystal نوعًا يُعرف باسم String، ويُستخدم لتمثيل النصوص. السلاسل النصية في Crystal عبارة عن متتاليات من أحرف يونيكود. السلاسل النصية غير قابلة للتغيير، أي أنه لا يمكن تغييرها بعد إنشائها. وهذا يعني أن سلسلة نصية جديدة تُنشأ في كل مرة تعدّل فيها سلسلة نصية، لذلك لا تتغير السلسلة النصية الأصلية.

لتعريف سلسلة نصية تستخدم علامتي الاقتباس المزدوجتين ".

"Hello World"

الدمج

لدمج سلسلتين نصيتين، استخدم العامل +. سيُرجع العامل + سلسلة نصية جديدة تجمع السلسلتين.

hello = "Hello"
hello + " World"
# => "Hello World"

التحويل بين السلاسل النصية والأعداد

تُحوّل الطريقة to_i سلسلة نصية إلى عدد صحيح. وبدلًا من ذلك، يمكن استخدام الطريقة to_f لإرجاع عدد عشري. إذا تعذّر تحويل السلسلة النصية إلى عدد، فسيُرفع استثناء ArgumentError.

"1".to_i
# => 1

"1.0".to_f
# => 1.0

"Hello".to_i
# => ArgumentError: Invalid integer: Hello

ويمكن تحويل عدد صحيح أو عدد عشري إلى سلسلة نصية باستخدام الطريقة to_s.

1.to_s
# => "1"

1.0.to_s
# => "1.0"

الإدراج

الإدراج أسلوب ملائم لدمج السلاسل النصية وتضمين التعبيرات فيها. لإدراج قيمة في سلسلة نصية، يمكنك استخدام المحرف # متبوعًا بالأقواس المعقوفة {} مع التعبير داخل الأقواس.

name = "World"
"Hello #{name}!"
# => "Hello World!"

ستحوّل Crystal نتيجة التعبير تلقائيًا إلى سلسلة نصية.

"Hello #{1 + 1}!"
# => "Hello 2!"

الحجم

عندما تحتاج إلى معرفة عدد الأحرف في سلسلة نصية، يمكنك استخدام الطريقة size، التي تُرجع طول السلسلة النصية كعدد صحيح. حجم السلسلة النصية خاصية مخزّنة فيها، لذا لا يلزم حساب الحجم في كل مرة تستدعي فيها الطريقة، ما يجعلها سريعة جدًا.

"Hello World".size
# => 11

الفهرسة

الفهرسة هي الحصول على حرف معيّن من سلسلة نصية. للحصول على حرف من String، يمكنك استخدام صيغة الأقواس المربعة المألوفة.

Note

[] مُنفَّذة كطريقة على كائن String، حيث يكون الفهرس هو وسيط الطريقة.

في Crystal، يقع الحرف الأول في سلسلة نصية عند الفهرس 0.

"Hello World"[0]
# => 'H'

"Hello World"[6]
# => 'W'

للحصول على حرف من نهاية سلسلة نصية، يمكنك أخذ طول السلسلة ناقص واحد للحصول على فهرس الحرف الأخير، وللحصول على الحرف قبل الأخير تأخذ طول السلسلة ناقص اثنين، وهكذا. هناك اختصار لذلك، وهو استخدام فهرس سالب ببساطة، حيث يقع الحرف الأخير عند الفهرس -1، والحرف قبل الأخير عند الفهرس -2، وهكذا.

name = "Hello World"
name[name.size - 1]
# => 'd'

name[-1]
# => 'd'

الهروب

بعض الأحرف لا يمكن كتابتها في سلسلة نصية مباشرة، وبدلًا من ذلك عليك استخدام متتالية هروب. على سبيل المثال، إذا أردت استخدام علامتي اقتباس مزدوجتين داخل سلسلة نصية، فيجب أن تسبقهما بمتتالية هروب. يمكنك استخدام المحرف \ لكتابة متتالية هروب متبوعة بالحرف الذي تريد تهريبه.

هذه هي الأحرف الخاصة في Crystal:

القيمة الوصف
\a تنبيه
\b مسافة للخلف
\e هروب
\f تغذية النموذج
\n تغذية السطر أو سطر جديد
\r إرجاع العربة
\t علامة جدولة أفقية
\v علامة جدولة رأسية
\\ شرطة مائلة عكسية
\' علامة اقتباس مفردة
\" علامة اقتباس مزدوجة
\377 محرف ASCII ثماني
\xFF محرف ASCII ست عشري
\uFFFF محرف يونيكود ست عشري
puts "Hello \"World\""
# => Hello "World"

puts "Hello \nWorld"
# => Hello
# => World

السلاسل النصية متعددة الأسطر

لكتابة سلسلة نصية متعددة الأسطر، تستخدم الصيغة نفسها التي تستخدمها مع سلسلة نصية من سطر واحد، لكن تنشئ سطرًا جديدًا لكل سطر تريده في السلسلة.

"Hello
World"
# => "Hello\nWorld"

التعليمات

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

1. رحّب بضيف جديد في الحفلة

نفّذ الطريقة welcome لتُرجع رسالة ترحيب باستخدام الاسم المعطى:

PartyRobot.welcome("Christiane")
# => Welcome to my party, Christiane!

2. رحّب بضيف جديد في الحفلة يصادف عيد ميلاده اليوم

نفّذ الطريقة happy_birthday لتُرجع رسالة عيد ميلاد باستخدام اسم الشخص وعمره المعطيين. للأسف، المبرمج مُتفاخر قليلًا، لذا على الروبوت أن يُظهر معرفته بعيد ميلاد كل ضيف.

PartyRobot.happy_birthday("Frank", 58)
# => Happy birthday Frank! You are now 58 years old!

3. أعطِ الاتجاهات

نفّذ الدالة assign_table لإعطاء الاتجاهات. ينبغي أن تقبل 5 معاملات.

  • اسم الضيف الجديد الذي نرحّب به (String)
  • رقم الطاولة (Int)
  • اسم من ستجلس بجانبه (String)
  • الاتجاه الذي ستجد فيه الطاولة (String)
  • المسافة إلى الطاولة (Float64)

يمكن رؤية الصيغة الدقيقة للنتيجة في المثال أدناه.

ينبغي اختصار اسم من ستجلس بجانبه إلى الحرف الأول والحرف الأخير من الاسم. يصبح Frank هو Fk، ويصبح Christian هو Cn، وهكذا.

يذكر الروبوت رقم الطاولة. ويذكر الروبوت أيضًا المسافة إلى الطاولة. لكن لحسن الحظ بدقة لا تتجاوز رقمًا واحدًا.

PartyRobot.assign_table("Christiane", "on the left", 27, 23.7834298, "Frank")
# =>
# Welcome to my party, Christiane!
# You have been assigned to table 27. Your table is on the left, exactly 23.8 meters from here.
# You will be sitting next to Fk.
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Crystal Exercism

مستعد لبدء روبوت الحفلة؟

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