مراجعة - هياكل البيانات المخصصة
جزء من قسم Fundamentals في رحلة GO على Coddy — الدرس 101 من 109.
التحدي
سهللنقم بإنشاء هيكل بيانات مخصص بسيط لمراجعة ما تعلمناه عن الـ structs في لغة Go.
في هذا التحدي، ستقوم بإنشاء هيكل بيانات Counter أساسي يمكنه:
- تتبع قيمة العداد
- زيادة العداد
- إنقاص العداد
- إعادة تعيين العداد إلى الصفر
أكمل الكود من خلال تنفيذ الأساليب (methods) المفقودة لهيكل Counter.
جرّب بنفسك
package main
import (
"fmt"
)
// Counter هو هيكل بيانات بسيط للعداد
type Counter struct {
value int
name string
}
// NewCounter ينشئ عداداً جديداً بالاسم المعطى
func NewCounter(name string) Counter {
return Counter{
value: 0,
name: name,
}
}
// Increment يزيد العداد بمقدار 1
func (c *Counter) Increment() {
// أضف كوداً لزيادة قيمة العداد
}
// Decrement ينقص العداد بمقدار 1 (ولكن ليس أقل من 0)
func (c *Counter) Decrement() {
// أضف كوداً لإنقاص قيمة العداد
// تأكد من أن القيمة لا تقل عن 0
}
// Reset يعيد ضبط العداد إلى 0
func (c *Counter) Reset() {
// أضف كوداً لإعادة ضبط العداد إلى 0
}
// Value تعيد القيمة الحالية للعداد
func (c Counter) Value() int {
// أضف كوداً لإعادة القيمة الحالية
return 0 // استبدل هذا
}
// String تعيد تمثيلاً نصياً للعداد
func (c Counter) String() string {
return fmt.Sprintf("%s: %d", c.name, c.value)
}
func main() {
// إنشاء عداد جديد باسم "Visitors"
visitors := NewCounter("Visitors")
// زيادة العداد عدة مرات
visitors.Increment()
visitors.Increment()
visitors.Increment()
// طباعة القيمة الحالية
fmt.Println(visitors)
fmt.Println("Current value:", visitors.Value())
// إنقاص العداد
visitors.Decrement()
fmt.Println(visitors)
// إعادة ضبط العداد
visitors.Reset()
fmt.Println(visitors)
// اختبار أن العداد لا يقل عن الصفر
visitors.Decrement()
fmt.Println(visitors)
}جميع دروس Fundamentals
4معاملات المقارنة والمعاملات المنطقية
معاملات المقارنة - الجزء 1معاملات المقارنة - الجزء 2معامل AND المنطقيمعامل OR المنطقيمعامل NOT المنطقيأساسيات أولوية المعاملاتملخص - إجراء المقارنات7تدفق التحكم: الحلقات التكرارية
شرح حلقة `for`حلقة `for` - أساسياتحلقة `for` - بشرط فقطالكلمة المفتاحية `break`الكلمة المفتاحية `continue`الحلقات المتداخلةملخص - تكرار العمليات10الأنواع المركبة: المصفوفات
مقدمة إلى المصفوفاتالتصريح عن المصفوفاتتهيئة المصفوفاتالوصول إلى عناصر المصفوفةطول المصفوفة باستخدام `len`التكرار عبر المصفوفاتالمصفوفات متعددة الأبعاد13الأنواع المركبة: Structs
تعريف أنواع مخصصةإنشاء نماذج من الـ Structsالوصول إلى حقول الـ Structالمؤشرات إلى الـ Structsتهيئة الـ Structsالـ Structs المضمنةالـ Structs المجهولةمراجعة - هياكل البيانات المخصصة2المتغيرات وأنواع البيانات الأساسية
ما هو المتغير؟استنتاج النوع باستخدام `:=`الأعداد الصحيحة (int)أرقام الفاصلة العائمةالقيم المنطقية (Booleans)النصوص (Strings)القيم الصفريةالثوابتقواعد التسميةملخص - المتغيرات والأنواع5الإدخال والإخراج الأساسي
المخرجات المنسقةرموز التنسيقطباعة الأنواعالحصول على مدخلات المستخدم الأساسيةملخص - الإدخال والإخراج8الدوال
فهم الدوالالتصريح عن دالةاستدعاء الدوالمعاملات الدالةإرجاع قيمة واحدةإرجاع قيم متعددةقيم الإرجاع المسماةأساسيات نطاق الدالةملخص - إنشاء كود قابل لإعادة الاستخدام3المعاملات الأساسية
المعاملات الحسابيةمعامل القسمةمعامل باقي القسمةمعامل التعيينمعاملات التعيين المركبةالزيادة والنقصانملخص - الحسابات6تدفق التحكم: الجمل الشرطية
جملة `if`الكلمة المفتاحية `else`الكلمة المفتاحية `else if`تظليل المتغيرات في `if`تهيئة المتغيراتجملة `switch``switch` مع التعبيرات`switch` بدون تعبيرالكلمة المفتاحية `fallthrough`ملخص - اتخاذ القرارات