ملخص - الأشكال والسلوكيات
جزء من قسم Logic & Flow في رحلة GO على Coddy — الدرس 19 من 68.
التحدي
سهلفي هذا التحدي، ستقوم بإنشاء نظام تواصل يوضح تعدد الأشكال (polymorphism) من خلال الواجهات (interfaces). ستقوم ببناء واجهة Speaker وتطبيقها مع أنواع مختلفة يمكنها "التحدث" بطرقها الفريدة.
ستتلقى ثلاثة مدخلات:
- سلسلة نصية تمثل عدد المتحدثين المراد إنشاؤهم (على سبيل المثال،
"3") - سلسلة نصية تحتوي على أنواع المتحدثين مفصولة بفاصلة (على سبيل المثال،
"person,parrot,person") - سلسلة نصية تحتوي على أسماء المتحدثين مفصولة بفاصلة (على سبيل المثال،
"Alice,Polly,Bob")
مهمتك هي:
- تعريف واجهة
Speakerمع توقيع طريقة واحدة:Speak()التي تعيد سلسلة نصية (string) - تعريف هيكل
Personمع حقلName(سلسلة نصية) - تعريف هيكل
Parrotمع حقلName(سلسلة نصية) - تطبيق طريقة
Speak()لكلا الهيكلين:- يجب أن يعيد Person:
"Hello, I'm [name]" - يجب أن يعيد Parrot:
"Squawk! [name] says hello!"
- يجب أن يعيد Person:
- إنشاء دالة تسمى
makeAllSpeakتأخذ شريحة (slice) من واجهاتSpeakerكمعامل - داخل
makeAllSpeak، قم بالمرور عبر الشريحة واستدعاء طريقةSpeak()لكل متحدث، مع طباعة النتيجة - تحليل المدخلات لإنشاء مثيلات المتحدثين المناسبة بناءً على الأنواع والأسماء المقدمة
- تخزين جميع المتحدثين في شريحة من واجهات
Speaker - استدعاء
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
1تدفق التحكم المتقدم
جملة Switch مع `fallthrough`الخروج من الحلقات المتداخلةالاستمرار في حلقة محددةجملة `goto`ملخص - التحكم المتقدم في الحلقات2الـ Structs والميثودز (Methods)
تعريف الـ Methods على الـ Structsالـ Value Receiversالـ Pointer Receiversاختيار الـ Receiversالـ Methods مقابل الـ Functionsملخص - سلوك الـ Struct5تعمق في الـ Maps
Maps من نوع Structsالـ Pointers كقيم في الـ Mapsالتحقق من الـ Nil Mapsمقارنة الـ Mapsمراجعة - عداد تكرار الكلمات3الواجهات (الأساسيات)
ما هي الواجهة؟تعريف الواجهةتطبيق الواجهةاستخدام أنواع الواجهاتالواجهة الفارغةتأكيدات النوع (Type Assertions)تبديل النوع (Type Switch)ملخص - الأشكال والسلوكيات