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

الواجهة الفارغة

جزء من قسم المنطق وتدفق التنفيذ في رحلة GO على Coddy. الدرس 16 من 68.

حتى الآن، عملتَ مع واجهات تتطلب أساليب محددة، لكن لدى Go واجهة خاصة مرنة للغاية: الواجهة الفارغة، وتُكتب كالتالي interface{}.

لا تتطلب الواجهة الفارغة أي أساليب على الإطلاق، ما يعني أن أي نوع في Go يستوفيها تلقائيًا. وبما أن كل نوع يطبّق صفرًا من الأساليب (على الأقل)، يمكن إسناد كل نوع إلى متغير من نوع interface{}:

var anything interface{}
anything = 42        // int
anything = "hello"   // string
anything = true      // bool
anything = []int{1, 2, 3}  // slice

هذا يجعل interface{} مفيدًا للغاية عندما تحتاج إلى التعامل مع data من أنواع غير معروفة أو متباينة. قد تواجه هذا عند قراءة ملفات الإعداد، أو معالجة input المستخدم، أو العمل مع واجهات API تُرجع أنواعًا مختلفة من data وفقًا للموقف.

ومع ذلك، بما أن الواجهة الفارغة يمكنها الاحتفاظ بأي نوع، فستحتاج غالبًا إلى تحديد النوع المخزَّن فعليًا بداخلها قبل أن تتمكن من استخدام القيمة بشكل ذي معنى. وهنا تصبح تأكيدات النوع ومفاتيح النوع (التي ستتعلّم عنها لاحقًا) أدوات أساسية للعمل بأمان مع قيم interface{}.

challenge icon

التحدي

سهل

في هذا التحدي، ستتدرّب على العمل باستخدام الواجهة الفارغة من خلال إنشاء معالج بيانات يمكنه التعامل مع أنواع مختلفة من القيم. ستنشئ دالة function تقبل معلَمة من النوع interface{} وتعالج أنواعًا مختلفة من البيانات.

ستتلقى مدخلين:

  • سلسلة نصية تمثل نوع البيانات (مثل "int" أو "string" أو "bool" أو "slice")
  • سلسلة نصية تمثل القيمة الفعلية (مثل "42" أو "hello" أو "true" أو "1,2,3")

مهمتك هي:

  1. إنشاء دالة تُسمى processData تأخذ معلَمة من النوع interface{} وتطبع معلومات حول القيمة
  2. بناءً على إدخال نوع البيانات، حوّل سلسلة القيمة إلى نوع Go المناسب:
    • بالنسبة إلى "int": حوّلها إلى عدد صحيح
    • بالنسبة إلى "string": استخدمها كسلسلة نصية
    • بالنسبة إلى "bool": حوّلها إلى قيمة منطقية
    • بالنسبة إلى "slice": حوّل القيم المفصولة بفواصل إلى شريحة من الأعداد الصحيحة
  3. استدعِ دالة processData باستخدام القيمة المحوّلة
  4. داخل processData، اطبع القيمة ونوعها بالتنسيق: "Value: [value], Type: [type]"

بالنسبة إلى إدخال الشريحة، يجب تحويل السلسلة المفصولة بفواصل مثل "1,2,3" إلى []int{1, 2, 3}. يجب أن تعمل الدالة مع أي نوع لأنها تقبل interface{}، مما يوضّح كيفية إمكانية احتفاظ الواجهة الفارغة بقيم من أي نوع. استخدم fmt.Printf مع رمزي التنسيق %v و%T لعرض القيمة والنوع على التوالي.

جرّب بنفسك

package main

import (
	"fmt"
)

func main() {
	// اقرأ الإدخال
	var dataType string
	var valueStr string
	fmt.Scanln(&dataType)
	fmt.Scanln(&valueStr)
	
	// TODO: اكتب الكود الخاص بك أدناه
	// 1. أنشئ الدالة processData التي تقبل interface{}
	// 2. حوّل valueStr إلى النوع المناسب بناءً على dataType
	// 3. استدعِ processData بالقيمة المحوّلة
	
}
quiz iconاختبر نفسك

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

جميع دروس المنطق وتدفق التنفيذ

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