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

القيم الصفرية والافتراضية

جزء من قسم البرمجة كائنية التوجه في رحلة GO على Coddy. الدرس 17 من 107.

في Go، لكل متغير قيمة صفرية: وهي القيمة الافتراضية التي يتم تعيينها عند تعريف متغير دون تهيئة صريحة. يُعد فهم القيم الصفرية أمرًا أساسيًا للعمل مع الهياكل، إذ تتلقى الحقول غير المُهيّأة هذه القيم الافتراضية تلقائيًا.

لكل type قيمة صفر خاصة به:

النوعقيمة الصفر
int, float640
string"" (سلسلة نصية فارغة)
boolfalse
pointer, slice, mapnil

عندما تنشئ struct، فإن أي field لا تحدده صراحةً يحصل على قيمة الصفر.

type User struct {
    Name   string
    Age    int
    Active bool
}

func main() {
    var u User
    fmt.Println(u.Name)   // "" (سلسلة فارغة)
    fmt.Println(u.Age)    // 0
    fmt.Println(u.Active) // false
}

ينطبق هذا أيضًا على partial initialization. Only تحصل fields التي تحددها على قيم مخصصة.

u := User{Name: "Alice"}
fmt.Println(u.Age)    // 0
fmt.Println(u.Active) // false

تجعل قيم الصفر الهياكل قابلة للاستخدام فورًا دون initialization صريح. ومع ذلك، كن حذرًا مع الأنواع المرجعية مثل الشرائح والخرائط. فقيمة الصفر الخاصة بها هي nil، مما قد يتسبب في حالات هلع أثناء التشغيل إذا حاولت استخدامها دون تهيئة.

challenge icon

التحدي

سهل

لنَبْنِ نظامًا لملف تعريف لاعب يوضّح كيفية عمل القيم الصفرية في Go. ستُنشئ ملفًا تعريفيًا للعبة، حيث يتم تعيين بعض الحقول صراحةً بينما تعتمد الحقول الأخرى على قيمها الصفرية الافتراضية.

ستُنظّم الشيفرة الخاصة بك عبر ملفين:

  • player.go: عرّف بنية Player التي تحتوي على الحقول following: Username (string)، وLevel (int)، وScore (int)، وIsPremium (bool)، وGuildName (string). وأنشئ أيضًا method باسم DisplayProfile تُرجع سلسلة نصية formatted تعرض جميع معلومات اللاعب.
  • main.go: اقرأ اسم مستخدم من input وأنشئ Player باستخدام تهيئة partial فقط: عيّن الحقل Username وحده. ثم اعرض profile الكامل لترى كيف تملأ Go الحقول غير المعينة بقيمها الصفرية.

سيتم توفير input following:

  • السطر 1: اسم مستخدم اللاعب

يجب أن تُرجع method DisplayProfile سلسلة نصية بهذا format الدقيق:

Username: [Username]
Level: [Level]
Score: [Score]
Premium: [IsPremium]
Guild: [GuildName]

على سبيل المثال، إذا كان اسم المستخدم هو ShadowKnight، فيجب أن يعرض output اسم المستخدم إلى جانب جميع القيم الصفرية للحقول غير المُهيّأة:

Username: ShadowKnight
Level: 0
Score: 0
Premium: false
Guild: 

لاحظ كيف لا يُظهر الحقل Guild شيئًا بعد النقطتين: تلك هي القيمة الصفرية للسلسلة النصية empty. يساعدك هذا التحدي على رؤية ما تسنده Go بالضبط إلى كل type عندما لا تقدم قيمة صريحة.

REQUIRED OUTPUT FORMAT: [Your translated content here]

جرّب بنفسك

package main

import (
	"fmt"
)

func main() {
	// اقرأ اسم المستخدم من الإدخال
	var username string
	fmt.Scanln(&username)

	// TODO: أنشئ Player باستخدام التهيئة الجزئية
	// عيّن فقط حقل Username، ودع الحقول الأخرى تستخدم القيم الصفرية

	// TODO: اعرض ملف تعريف اللاعب باستخدام الطريقة DisplayProfile
}
quiz iconاختبر نفسك

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

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم Go عبر الإنترنت