Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

ملخص - الأشكال والسلوكيات

جزء من قسم Logic & Flow في رحلة GO على Coddy — الدرس 19 من 68.

challenge icon

التحدي

سهل

في هذا التحدي، ستقوم بإنشاء نظام تواصل يوضح تعدد الأشكال (polymorphism) من خلال الواجهات (interfaces). ستقوم ببناء واجهة Speaker وتطبيقها مع أنواع مختلفة يمكنها "التحدث" بطرقها الفريدة.

ستتلقى ثلاثة مدخلات:

  • سلسلة نصية تمثل عدد المتحدثين المراد إنشاؤهم (على سبيل المثال، "3")
  • سلسلة نصية تحتوي على أنواع المتحدثين مفصولة بفاصلة (على سبيل المثال، "person,parrot,person")
  • سلسلة نصية تحتوي على أسماء المتحدثين مفصولة بفاصلة (على سبيل المثال، "Alice,Polly,Bob")

مهمتك هي:

  1. تعريف واجهة Speaker مع توقيع طريقة واحدة: Speak() التي تعيد سلسلة نصية (string)
  2. تعريف هيكل Person مع حقل Name (سلسلة نصية)
  3. تعريف هيكل Parrot مع حقل Name (سلسلة نصية)
  4. تطبيق طريقة Speak() لكلا الهيكلين:
    • يجب أن يعيد Person: "Hello, I'm [name]"
    • يجب أن يعيد Parrot: "Squawk! [name] says hello!"
  5. إنشاء دالة تسمى makeAllSpeak تأخذ شريحة (slice) من واجهات Speaker كمعامل
  6. داخل makeAllSpeak، قم بالمرور عبر الشريحة واستدعاء طريقة Speak() لكل متحدث، مع طباعة النتيجة
  7. تحليل المدخلات لإنشاء مثيلات المتحدثين المناسبة بناءً على الأنواع والأسماء المقدمة
  8. تخزين جميع المتحدثين في شريحة من واجهات Speaker
  9. استدعاء makeAllSpeak مع شريحة المتحدثين الخاصة بك

يجب إنشاء المتحدثين بالترتيب الذي يظهرون به في المدخلات. على سبيل المثال، إذا كانت الأنواع هي "person,parrot,person" والأسماء هي "Alice,Polly,Bob"، فقم بإنشاء Person باسم Alice، ثم Parrot باسم Polly، ثم Person باسم Bob. يوضح هذا التحدي كيف يمكن معاملة الأنواع المختلفة بشكل موحد من خلال واجهة مشتركة، مما يبرز قوة تعدد الأشكال في لغة Go.

جرّب بنفسك

package main

import (
	"fmt"
	"strconv"
	"strings"
)

func main() {
	// قراءة المدخلات
	var numSpeakersStr string
	var speakerTypesStr string
	var speakerNamesStr string
	
	fmt.Scanln(&numSpeakersStr)
	fmt.Scanln(&speakerTypesStr)
	fmt.Scanln(&speakerNamesStr)
	
	// تحليل المدخلات
	numSpeakers, _ := strconv.Atoi(numSpeakersStr)
	speakerTypes := strings.Split(speakerTypesStr, ",")
	speakerNames := strings.Split(speakerNamesStr, ",")
	
	// TODO: اكتب الكود الخاص بك أدناه
	// 1. تعريف واجهة Speaker
	// 2. تعريف هياكل (structs) لـ Person و Parrot
	// 3. تنفيذ دوال Speak() لكلا الهيكلين
	// 4. إنشاء دالة makeAllSpeak
	// 5. إنشاء المتحدثين بناءً على المدخلات وتخزينهم في شريحة (slice)
	// 6. استدعاء makeAllSpeak مع الشريحة الخاصة بك
	
}

جميع دروس Logic & Flow