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

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

جزء من قسم Logic & Flow في رحلة GO على Coddy — الدرس 53 من 68.

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

لإنشاء حزمة، تبدأ بالتصريح عنها في الجزء العلوي من ملفك باستخدام الكلمة المفتاحية package متبوعة باسم الحزمة. بالنسبة لحزمة الآلة الحاسبة الخاصة بنا، سنستخدم:

package calculator

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

package calculator

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

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

package main

import "calculator"

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

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

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

challenge icon

التحدي

سهل

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

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

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

مهمتك هي:

  1. إنشاء حزمة mathutils عن طريق التصريح عن package mathutils في الأعلى
  2. تحليل المدخل الأول عن طريق التقسيم بناءً على الأنابيب (|) للحصول على تعريفات الدوال الفردية
  3. لكل تعريف دالة، قم بالتقسيم بناءً على النقطتين الرأسيتين للحصول على اسم الدالة، والمعاملات، ونوع العملية
  4. إنشاء الدوال المُصدرة التالية في حزمة 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. في برنامجك الرئيسي، قم باستيراد حزمة mathutils
  6. عرض ترويسة معلومات الحزمة: "=== MATHUTILS PACKAGE DEMO ==="
  7. تحليل المدخل الأول وعرض الدوال المتاحة:
    • "Available functions in mathutils package:"
    • لكل دالة: "- [function_name]: Performs [operation_type] on two integers"
  8. تحليل المدخل الثاني عن طريق التقسيم بناءً على الأنابيب للحصول على طلبات الحساب الفردية
  9. لكل طلب حساب، قم بالتقسيم بناءً على النقطتين الرأسيتين للحصول على اسم الدالة والمعاملات
  10. تقسيم المعاملات بناءً على الفواصل للحصول على القيمتين الصحيحتين
  11. تحويل السلاسل النصية للمعاملات إلى أعداد صحيحة باستخدام strconv.Atoi
  12. عرض ترويسة عملية الحساب: "Performing calculations:"
  13. لكل طلب حساب:
    • استدعاء الدالة المناسبة من حزمة 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 — قم بالتقسيم على | أولاً، ثم قم بتقسيم كل مدخل على : لاستخراج اسم الدالة (الفهرس 0) ونوع العملية (الفهرس 2).

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

ورقة مرجعية

لإنشاء حزمة مخصصة، قم بالتصريح عنها في الجزء العلوي من ملفك باستخدام الكلمة المفتاحية package:

package calculator

فقط المعرفات المصدرة (التي تبدأ بحرف كبير) يمكن الوصول إليها من الحزم الأخرى:

package calculator

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

قم باستيراد واستخدام حزمتك المخصصة من ملف آخر:

package main

import "calculator"

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

ينظم هذا النهج البرمجي الكود ويسمح بإعادة استخدامه عبر برامج متعددة دون تكرار الكود.

جرّب بنفسك

package main

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

// TODO: قم بإنشاء دوال حزمة mathutils الخاصة بك هنا
// بما أننا لا نستطيع استخدام ملفات منفصلة، قم بتعريف الدوال مباشرة
// عادة ما تكون هذه الدوال في ملف حزمة منفصل

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

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

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

	// TODO: اكتب الكود الخاص بك أدناه
	// 1. قم بتعريف دوال الجمع والطرح والضرب والقسمة (محاكاة لحزمة mathutils)
	// 2. قم بتحليل functionDefs: التقسيم بواسطة '|' للحصول على كل تعريف، ثم تقسيم كل منها بواسطة ':'
	//    التنسيق: FuncName:param1,param2:operation (مثال: "Add:5,3:addition")
	// 3. عرض معلومات الحزمة والدوال المتاحة
	// 4. قم بتحليل calcRequests (التقسيم بواسطة '|')، وإجراء الحسابات
	// 5. عرض النتائج وإحصائيات الملخص

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

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

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

جميع دروس Logic & Flow