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)
}

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

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 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. قم بتعريف دوال Add و Subtract و Multiply و Divide (محاكاة لحزمة 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