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

روبوت الحفلة

تمرين تعلّمي

مقدمة

الحزم

في Go يُنظَّم التطبيق في حزم. الحزمة مجموعة من الملفات المصدرية الموجودة في المجلد نفسه. يجب أن يكون لجميع الملفات المصدرية في المجلد اسم الحزمة نفسه في أعلى الملف. وبحسب العُرف، تُسمّى الحزم بأسماء المجلدات التي تقع فيها.

package greeting

توفّر Go مكتبة قياسية واسعة من الحزم يمكنك استخدامها في برنامجك عبر الكلمة المفتاحية import. وتُستورد حزم المكتبة القياسية باستخدام أسمائها.

package greeting

import "fmt"

ثم يُشار إلى الحزمة المستوردة باسم الحزمة:

world := "World"
fmt.Sprintf("Hello %s", world)

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

package greeting

// Hello is a public function (callable from other packages).
func Hello(name string) string {
    return "Hello " + name
}

// hello is a private function (not callable from other packages).
func hello(name string) string {
    return "Hello " + name
}

تنسيق السلاسل النصية

توفّر Go حزمة مدمجة تُسمى fmt (حزمة التنسيق) تقدّم مجموعة متنوعة من الدوال للتحكم في تنسيق المدخلات والمخرجات. الدالة الأكثر استخدامًا هي Sprintf، وهي تستخدم أفعالًا مثل %s لإدراج القيم داخل سلسلة نصية وتُرجع تلك السلسلة النصية.

import "fmt"

food := "taco"
fmt.Sprintf("Bring me a %s", food)
// Returns: Bring me a taco

في Go تُنسَّق قيم الأعداد العشرية بسهولة باستخدام أفعال Sprintf: %g (تمثيل مختصر)، و%e (أس)، و%f (بدون أس). وتتيح الأفعال الثلاثة التحكم في عرض الحقل وموضعه الرقمي.

import "fmt"

number := 4.3242
fmt.Sprintf("%.2f", number)
// Returns: 4.32

يمكنك العثور على قائمة كاملة بالأفعال المتاحة في توثيق حزمة التنسيق.

تحتوي fmt على دوال أخرى للتعامل مع السلاسل النصية، مثل Println الذي يطبع ببساطة الوسائط التي يستقبلها إلى وحدة التحكم، وPrintf الذي ينسّق المدخلات بالطريقة نفسها التي يستخدمها Sprintf قبل طباعتها.

التعليمات

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

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

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

Welcome("Christiane")
// => Welcome to my party, Christiane!

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

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

HappyBirthday("Frank", 58)
// => Happy birthday Frank! You are now 58 years old!

3. أعطِ الإرشادات

نفّذ الدالة AssignTable لإعطاء الإرشادات. يجب أن تقبل 5 معاملات.

  • اسم الضيف الجديد الذي سيُرحَّب به (string)
  • رقم الطاولة (int)
  • اسم من يجلس بجانبه (string)
  • الاتجاه الذي توجد فيه الطاولة (string)
  • المسافة إلى الطاولة (float64)

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

يعرض الروبوت رقم الطاولة بصيغة مكوّنة من 3 أرقام. إذا كان الرقم أقل من 3 أرقام، تُضاف إليه أصفار بادئة ليصبح 3 أرقام (مثلًا: 3 يصبح 003). ويذكر الروبوت أيضًا مسافة الطاولة. ولحسن الحظ، بدقة لا تتجاوز رقمًا واحدًا فقط.

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

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

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