مراجعة - هياكل البيانات المخصصة
جزء من قسم 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`ملخص - اتخاذ القراراتتدرّب بنفسك: مترجم Go عبر الإنترنت