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

مراجعة - دفتر العناوين

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

challenge icon

التحدي

سهل

لنَبْنِ نظامًا لدفتر جهات اتصال يجمع بين الأنواع المخصّصة، والبُنى المتداخلة، ووسوم البُنى، والقيم الصفرية: جميع المفاهيم التي أتقنتها في هذا الفصل.

ستنظّم شفرتك عبر ملفين:

  • contact.go: عرّف نموذج بيانات دفتر جهات الاتصال باستخدام أنواع مخصّصة معبّرة وتنسيق JSON مناسب:
    • أنشئ النوعين المخصّصين Phone وEmail بالاعتماد على string لجعل شفرتك موضِّحةً لذاتها
    • عرّف بنية Address بالحقول Street وCity وCountry، مع وسم JSON مناسب لكل منها
    • عرّف بنية Contact التي تحتوي على Name (من النوع string)، وPhone (من نوع Phone)، وEmail (من نوع Email)، وAddress (بنية متداخلة). استخدم وسوم JSON بحيث يتم حذف phone وemail إذا كانا فارغين
  • main.go: اقرأ معلومات جهة الاتصال من الإدخال، وأنشئ نسخة من Contact، وأخرجها بصيغة JSON منسّقة. قد تحتوي بعض جهات الاتصال على معلومات غير مكتملة؛ اترك القيم الصفرية وomitempty تتعاملان مع ذلك بسلاسة.

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

  • السطر 1: اسم جهة الاتصال
  • السطر 2: رقم الهاتف (قد يكون فارغًا)
  • السطر 3: عنوان البريد الإلكتروني (قد يكون فارغًا)
  • السطر 4: عنوان الشارع
  • السطر 5: المدينة
  • السطر 6: الدولة

استخدم json.MarshalIndent مع مسافتين للمسافة البادئة. اطبع سلسلة JSON الناتجة.

على سبيل المثال، إذا أُعطيت جهة اتصال اسمها Alice Smith، ومن دون هاتف، وبريد إلكتروني alice@example.com، وشارع 123 Main St، ومدينة Boston، ودولة USA، فينبغي أن تبدو مخرجاتك كما يلي:

{
  "name": "Alice Smith",
  "email": "alice@example.com",
  "address": {
    "street": "123 Main St",
    "city": "Boston",
    "country": "USA"
  }
}

لاحظ كيف لا يظهر الحقل phone على الإطلاق لأنه كان فارغًا: هذه هي وسم omitempty أثناء العمل!

جرّب بنفسك

package main

import (
	"bufio"
	"encoding/json"
	"fmt"
	"os"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)

	// اقرأ الاسم
	scanner.Scan()
	name := scanner.Text()

	// اقرأ الهاتف (قد يكون فارغًا)
	scanner.Scan()
	phone := scanner.Text()

	// اقرأ البريد الإلكتروني (قد يكون فارغًا)
	scanner.Scan()
	email := scanner.Text()

	// اقرأ الشارع
	scanner.Scan()
	street := scanner.Text()

	// اقرأ المدينة
	scanner.Scan()
	city := scanner.Text()

	// اقرأ البلد
	scanner.Scan()
	country := scanner.Text()

	// TODO: أنشئ مثيل Contact باستخدام قيم الإدخال
	// استخدم أنواعك المخصصة Phone و Email للحقول المعنية
	// أنشئ الـ Address struct المتداخل مع street و city و country

	// TODO: استخدم json.MarshalIndent لتحويل الـ contact إلى JSON
	// استخدم "" كبادئة و "  " (مسافتان) كـ indent

	// TODO: اطبع سلسلة JSON
	_ = name
	_ = phone
	_ = email
	_ = street
	_ = city
	_ = country
}

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

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