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

Structs مجهولة

جزء من قسم Object Oriented Programming في رحلة GO على Coddy — الدرس 15 من 107.

إن البنية المجهولة (anonymous struct) هي بنية بدون نوع مسمى. يمكنك تعريف هيكلها وإنشاء مثيل لها في خطوة واحدة، دون استخدام الكلمة المفتاحية type.

person := struct {
    Name string
    Age  int
}{
    Name: "Alice",
    Age:  30,
}

يؤدي هذا إلى إنشاء قيمة struct مباشرة دون التصريح عن نوع قابل لإعادة الاستخدام. تعد الـ anonymous structs مفيدة عندما تحتاج إلى هيكل بيانات سريع لمرة واحدة لن يتم استخدامه في مكان آخر في الكود الخاص بك.

حالة استخدام شائعة هي تجميع البيانات ذات الصلة لوظيفة أو اختبار واحد.

config := struct {
    Host string
    Port int
}{
    Host: "localhost",
    Port: 8080,
}
fmt.Println(config.Host) // localhost

تُعد الهياكل المجهولة (Anonymous structs) شائعة أيضًا في الاختبارات المعتمدة على الجداول (table-driven tests) حيث تمتلك كل حالة اختبار حقولاً فريدة.

tests := []struct {
    input    int
    expected int
}{
    {1, 2},
    {5, 10},
}

بما أن الـ structs المجهولة (anonymous structs) ليس لها اسم نوع، فلا يمكنك تعريف methods عليها أو إعادة استخدام النوع في مكان آخر. استخدمها لتجميع البيانات المؤقت والمحلي. لأي شيء ستشير إليه عدة مرات، قم بتعريف نوع struct مسمى بدلاً من ذلك.

challenge icon

التحدي

سهل

لنقم ببناء نظام تهيئة سريع يوضح متى تتألق الهياكل المجهولة (anonymous structs) — لتجميع البيانات لمرة واحدة دون الحاجة إلى نوع قابل لإعادة الاستخدام.

ستقوم بتنظيم الكود الخاص بك عبر ملفين:

  • config.go: قم بإنشاء دالة تسمى GetServerConfig تأخذ اسم الخادم (string)، والمنفذ (int)، ووضع التصحيح (bool) كمعلمات. يجب أن تعيد هذه الدالة هيكلاً مجهولاً (anonymous struct) يحتوي على هذه القيم الثلاث كحقول: Name و Port و Debug. نظرًا لأن هذه التهيئة تُستخدم في مكان واحد فقط، فلا داعي لتعريف نوع مسمى لها.
  • main.go: اقرأ قيم تهيئة الخادم من المدخلات، واستدعِ دالة GetServerConfig الخاصة بك، واعرض تفاصيل التهيئة.

سيتم توفير المدخلات التالية:

  • السطر 1: اسم الخادم
  • السطر 2: رقم المنفذ
  • السطر 3: وضع التصحيح (true أو false)

تنسيق المخرجات:

Server: [Name]
Port: [Port]
Debug: [Debug]

على سبيل المثال، إذا كانت المدخلات api-server و 8080 و true، يجب أن تكون مخرجاتك:

Server: api-server
Port: 8080
Debug: true

لاحظ كيف يسمح لك الهيكل المجهول (anonymous struct) بإرجاع بيانات مجمعة دون إرباك قاعدة الكود الخاصة بك بنوع يُستخدم مرة واحدة فقط.

ورقة مرجعية

الـ هيكل المجهول (anonymous struct) هو هيكل بدون نوع مسمى، يتم تعريفه وإنشاؤه في خطوة واحدة دون استخدام الكلمة المفتاحية type:

person := struct {
    Name string
    Age  int
}{
    Name: "Alice",
    Age:  30,
}

تعتبر الهياكل المجهولة مفيدة لهياكل البيانات التي تُستخدم لمرة واحدة ولن يتم إعادة استخدامها في مكان آخر في الكود الخاص بك.

تشمل حالات الاستخدام الشائعة تجميع البيانات ذات الصلة لوظيفة واحدة:

config := struct {
    Host string
    Port int
}{
    Host: "localhost",
    Port: 8080,
}
fmt.Println(config.Host) // localhost

والاختبارات القائمة على الجداول (table-driven tests):

tests := []struct {
    input    int
    expected int
}{
    {1, 2},
    {5, 10},
}

لا يمكن أن تحتوي الهياكل المجهولة على دوال (methods) معرفة عليها أو يتم إعادة استخدامها كنوع. استخدمها لتجميع البيانات المؤقت والمحلي. بالنسبة للأنواع التي يتم الرجوع إليها عدة مرات، قم بتعريف هيكل مسمى (named struct) بدلاً من ذلك.

يمكن للدوال أن تعيد هياكل مجهولة:

func GetConfig() struct {
    Name string
    Port int
} {
    return struct {
        Name string
        Port int
    }{
        Name: "server",
        Port: 8080,
    }
}

جرّب بنفسك

package main

import (
	"fmt"
)

func main() {
	// قراءة قيم المدخلات
	var name string
	var port int
	var debug bool

	fmt.Scanln(&name)
	fmt.Scanln(&port)
	fmt.Scanln(&debug)

	// TODO: استدعاء GetServerConfig مع قيم المدخلات
	// وتخزين الـ anonymous struct المرتجع

	// TODO: طباعة التكوين (configuration) بالتنسيق المطلوب:
	// Server: [Name]
	// Port: [Port]
	// Debug: [Debug]
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming