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

ملخص - بناء أداة مساعدة

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

challenge icon

التحدي

سهل

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

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

  • سلسلة نصية تحتوي على مواصفات الوظائف بتنسيق "function1:description1,function2:description2" (على سبيل المثال، "Reverse:reverses a string,ToUpper:converts to uppercase,ToLower:converts to lowercase")
  • سلسلة نصية تحتوي على نصوص الاختبار مفصولة بعلامة الأنبوب بتنسيق "string1|string2|string3" (على سبيل المثال، "hello|Go Programming|WORLD")

مهمتك هي:

  1. إنشاء حزمة stringutil عن طريق التصريح عن package stringutil
  2. تحليل المدخل الأول عن طريق تقسيمه عند الفواصل للحصول على مواصفات كل وظيفة على حدة
  3. لكل مواصفة وظيفة، قم بالتقسيم عند النقطتين الرأسيتين للحصول على اسم الوظيفة ووصفها
  4. تنفيذ الوظائف المُصدرة التالية في حزمة stringutil الخاصة بك:
    • Reverse(s string) string - تعيد النص مع ترتيب الأحرف بشكل عكسي
    • ToUpper(s string) string - تعيد النص محولاً إلى أحرف كبيرة
    • ToLower(s string) string - تعيد النص محولاً إلى أحرف صغيرة
    • Length(s string) int - تعيد طول النص
  5. في برنامجك الرئيسي، قم باستيراد حزمة stringutil
  6. عرض ترويسة الحزمة: "=== STRINGUTIL PACKAGE DEMONSTRATION ==="
  7. عرض الوظائف المتاحة:
    • "Available functions in stringutil package:"
    • لكل وظيفة من المدخل الأول: "- [function_name]: [description]"
  8. تحليل المدخل الثاني عن طريق تقسيمه عند علامة الأنبوب للحصول على نصوص الاختبار الفردية
  9. عرض ترويسة الاختبار: "Testing stringutil functions:"
  10. لكل نص اختبار، استعرض جميع الوظائف:
    • "Testing with: \"[test_string]\""
    • " stringutil.Reverse: \"[reversed_result]\""
    • " stringutil.ToUpper: \"[uppercase_result]\""
    • " stringutil.ToLower: \"[lowercase_result]\""
    • " stringutil.Length: [length_result]"
  11. حساب وعرض الإحصائيات:
    • "=== STATISTICS ==="
    • "Total test strings processed: [number_of_test_strings]"
    • "Functions available in package: [number_of_functions_from_first_input]"
    • "Total function calls made: [total_function_calls]"
  12. عرض أطول وأقصر النصوص:
    • "Longest string: \"[longest_string]\" (length: [length])"
    • "Shortest string: \"[shortest_string]\" (length: [length])"
  13. عرض رسالة الإتمام: "Package demonstration completed successfully"

استخدم حزمة strings لتقسيم نصوص المدخلات ومعالجة النصوص، وحزمة fmt للمخرجات المنسقة. بالنسبة لوظيفة Reverse، ستحتاج إلى تحويل النص إلى شريحة (slice) من الـ runes، وعكس الترتيب، ثم التحويل مرة أخرى إلى نص. تذكر أن جميع الوظائف المُصدرة يجب أن تبدأ بأحرف كبيرة لتكون قابلة للوصول من الحزم الأخرى. يوضح هذا التحدي كيفية إنشاء حزم أدوات قابلة لإعادة الاستخدام وتنظيم الوظائف ذات الصلة معاً.

جرّب بنفسك

package main

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

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

// func Reverse(s string) string {
//     // تحويل إلى runes، عكسها، ثم تحويلها مرة أخرى إلى string
// }

// func ToUpper(s string) string {
//     // استخدم strings.ToUpper
// }

// func ToLower(s string) string {
//     // استخدم strings.ToLower
// }

// func Length(s string) int {
//     // إرجاع len(s)
// }

func main() {
	// قراءة المدخلات باستخدام bufio.Scanner للتعامل مع المسافات بشكل صحيح
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	functionSpecs := scanner.Text()
	
	scanner.Scan()
	testStrings := scanner.Text()
	
	// تحليل مواصفات الدوال
	funcList := strings.Split(functionSpecs, ",")
	
	// تحليل سلاسل الاختبار
	testList := strings.Split(testStrings, "|")
	
	// TODO: اكتب الكود الخاص بك أدناه
	// 1. عرض ترويسة الحزمة
	// 2. عرض الدوال المتاحة من funcList (تحقق من أطوال المصفوفة)
	// 3. اختبار جميع الدوال مع كل سلسلة اختبار
	// 4. حساب وعرض الإحصائيات
	// 5. العثور على أطول/أقصر السلاسل وعرضها (تحقق مما إذا كانت testList تحتوي على عناصر)
	// 6. عرض رسالة الإكمال
	
	// تذكر استخدام دوال حزمة stringutil الخاصة بك مثل:
	// Reverse(testString)
	// ToUpper(testString)
	// ToLower(testString)
	// Length(testString)
}

جميع دروس Logic & Flow