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

إنشاء حزمة بسيطة

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

حان الوقت الآن لإنشاء حزمة مخصّصة خاصة بك! يتيح لك إنشاء الحزم تنظيم شيفرتك في وحدات قابلة لإعادة الاستخدام يمكن استيرادها واستخدامها عبر برامج مختلفة.

لإنشاء حزمة، تبدأ بتعريفها في أعلى file باستخدام الكلمة المفتاحية package متبوعةً باسم الحزمة. بالنسبة إلى حزمة calculator، سنستخدم:

package calculator

داخل هذه الحزمة، يمكنك define functions والمتغيرات والأنواع. تذكّر أن المعرّفات المصدّرة فقط (تلك التي تبدأ بحرف كبير) ستكون متاحة من الحزم الأخرى. إليك كيفية define دالة Add مُصدّرة:

package calculator

func Add(a, b int) int {
    return a + b
}

لاستخدام حزمتك المخصّصة من ملف آخر، تستوردها تمامًا مثل أي حزمة أخرى. ومن حزمة main، يمكنك بعد ذلك استدعاء functions المصدّرة:

package main

import "calculator"

func main() {
    result := calculator.Add(5, 3)
}

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

challenge icon

التحدي

سهل

أنشئ حزمة مخصصة mathutils تحتوي على العمليات الرياضية الأساسية، ثم استخدمها من برنامجك الرئيسي. سيختبر هذا التحدي قدرتك على إنشاء حزمة، وdefine دوال function مُصدَّرة، وimport حزمتك المخصصة لاستخدامها في برنامج آخر.

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

  • سلسلة نصية تحتوي على تعريفات function بالتنسيق "function1:param1,param2:operation|function2:param1,param2:operation" (مثلًا: "Add:5,3:addition|Multiply:4,7:multiplication|Subtract:10,4:subtraction")
  • سلسلة نصية تحتوي على طلبات calculation بالتنسيق "operation1:value1,value2|operation2:value1,value2|operation3:value1,value2" (مثلًا: "Add:15,25|Multiply:6,8|Subtract:50,20")

مهمتك هي:

  1. أنشئ حزمة mathutils من خلال التصريح بـ package mathutils في الأعلى
  2. حلّل المُدخل الأول من خلال التقسيم عند الشرطات العمودية (|) للحصول على تعريفات function الفردية
  3. لكل تعريف function، قسّمه عند النقطتين الرأسيتين للحصول على اسم function والمعاملات ونوع العملية
  4. أنشئ دوال function المُصدَّرة التالية في حزمة mathutils:
    • Add(a, b int) int - تُرجع مجموع a وb
    • Subtract(a, b int) int - تُرجع a ناقص b
    • Multiply(a, b int) int - تُرجع حاصل ضرب a وb
    • Divide(a, b int) int - تُرجع ناتج قسمة a على b (قسمة صحيحة)
  5. في برنامجك الرئيسي، قم بعملية import لحزمة mathutils
  6. اعرض ترويسة معلومات الحزمة: "=== MATHUTILS PACKAGE DEMO ==="
  7. حلّل المُدخل الأول واعرض الدوال المتاحة:
    • "Available functions in mathutils package:"
    • لكل دالة: "- [function_name]: Performs [operation_type] on two integers"
  8. حلّل المُدخل الثاني من خلال التقسيم عند الشرطات العمودية للحصول على طلبات calculation الفردية
  9. لكل طلب calculation، قسّمه عند النقطتين الرأسيتين للحصول على اسم function والمعاملات
  10. قسّم المعاملات عند الفواصل للحصول على القيمتين الصحيحتين
  11. حوّل سلاسل المعاملات إلى أعداد صحيحة باستخدام strconv.Atoi
  12. اعرض ترويسة عملية calculation: "Performing calculations:"
  13. لكل طلب calculation:
    • استدعِ الدالة المناسبة من حزمة mathutils
    • اعرض: "mathutils.[function_name]([param1], [param2]) = [result]"
  14. احسب واعرض إحصاءات الملخص:
    • "Calculation Summary:"
    • "Total calculations performed: [number_of_calculations]"
    • "Functions used: [comma_separated_list_of_unique_function_names_used]"
    • "Sum of all results: [sum_of_all_calculation_results]"
  15. اعرض تأكيد استخدام الحزمة:
    • "Package demonstration completed successfully"
    • "All functions from mathutils package executed correctly"

استخدم حزمة strings لتقسيم سلاسل الإدخال، وحزمة strconv لتحويل السلاسل إلى أعداد صحيحة، وحزمة fmt لإخراج منسّق. تذكّر أن الدوال التي تبدأ بأحرف كبيرة فقط هي التي سيتم تصديرها ويمكن الوصول إليها من الحزم الأخرى.

مهم: يستخدم سطرا الإدخال كلاهما الشرطات العمودية (|) كمحدِّد بين العناصر. لكل عنصر في المُدخل الأول التنسيق FunctionName:param1,param2:operationtype: قسّمه عند | أولًا، ثم قسّم كل عنصر عند : لاستخراج اسم function (الفهرس 0) ونوع العملية (الفهرس 2).

يوضح هذا التحدي كيفية إنشاء شيفرة قابلة لإعادة الاستخدام من خلال الحزم المخصصة، وكيفية تنظيم الوظائف في وحدات منطقية.

جرّب بنفسك

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

// TODO: Create your mathutils package functions here
// بما أننا لا نستطيع استخدام ملفات منفصلة، عرّف الدوال مباشرة
// هذه عادةً ما تكون في ملف حزمة منفصل

func main() {
	// اقرأ الإدخال باستخدام bufio.Scanner للتعامل مع المسافات بشكل صحيح
	scanner := bufio.NewScanner(os.Stdin)

	scanner.Scan()
	functionDefs := scanner.Text()

	scanner.Scan()
	calcRequests := scanner.Text()

	// TODO: اكتب الكود الخاص بك أدناه
	// 1. Define Add, Subtract, Multiply, Divide functions (simulating mathutils package)
	// 2. حلّل functionDefs: قسّم بواسطة '|' للحصول على كل تعريف، ثم قسّم كل واحد بواسطة ':'
	//    التنسيق: FuncName:param1,param2:operation  (مثل "Add:5,3:addition")
	// 3. Display package information and available functions
	// 4. Parse calcRequests (split by '|'), perform calculations
	// 5. اعرض النتائج وإحصائيات الملخص

	// كبت تحذيرات المتغيرات غير المستخدمة
	_ = functionDefs
	_ = calcRequests
	_ = fmt.Sprintf
	_ = strconv.Atoi
	_ = strings.Split

	// تذكر إخراج التنسيق المطلوب كما هو محدد في التحدي
}
quiz iconاختبر نفسك

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

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

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