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

المدة الزمنية

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

عند العمل مع الوقت في لغة Go، ستحتاج غالباً إلى تمثيل فترات زمنية - مثل "5 دقائق" أو "ساعتين". توفر لغة Go نوع time.Duration خصيصاً لهذا الغرض.

يمثل time.Duration فترة زمنية بين لحظتين. تتضمن لغة Go العديد من الثوابت المحددة مسبقاً التي تجعل إنشاء الفترات الزمنية بسيطاً وسهل القراءة:

tenMinutes := 10 * time.Minute
twoHours := 2 * time.Hour
thirtySeconds := 30 * time.Second

ثوابت المدة الأكثر استخدامًا هي time.Nanosecond، و time.Microsecond، و time.Millisecond، و time.Second، و time.Minute، و time.Hour. يمكنك ضرب هذه الثوابت في أعداد صحيحة لإنشاء المدة المحددة التي تحتاجها.

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

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

challenge icon

التحدي

سهل

قم بإنشاء مؤقت لجلسة تمارين رياضية يستخدم time.Duration لتتبع فترات التمارين المختلفة وفترات الراحة. سيختبر هذا التحدي قدرتك على إنشاء قيم المدة الزمنية باستخدام ثوابت Go المحددة مسبقاً وإجراء الحسابات عليها.

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

  • سلسلة نصية تحتوي على تعريفات التمارين بتنسيق "exercise1:duration_value:duration_unit,exercise2:duration_value:duration_unit" (على سبيل المثال، "Push-ups:30:Second,Plank:2:Minute,Squats:45:Second")
  • سلسلة نصية تحتوي على معلومات فترة الراحة بتنسيق "rest_duration_value:rest_duration_unit" (على سبيل المثال، "15:Second")

مهمتك هي:

  1. تحليل المدخل الأول عن طريق تقسيمه عند الفواصل للحصول على إدخالات التمارين الفردية
  2. لكل إدخال تمرين، قم بالتقسيم عند النقطتين الرأسيتين لاستخراج اسم التمرين، وقيمة المدة (كسلسلة نصية)، ووحدة المدة
  3. تحليل المدخل الثاني عن طريق التقسيم عند النقطتين الرأسيتين للحصول على قيمة ووحدة مدة الراحة
  4. تحويل قيم المدة من سلاسل نصية إلى أعداد صحيحة وإنشاء كائنات time.Duration باستخدام الثوابت المناسبة:
    • بالنسبة لـ "Second": اضرب في time.Second
    • بالنسبة لـ "Minute": اضرب في time.Minute
    • بالنسبة لـ "Hour": اضرب في time.Hour
  5. عرض رأس التطبيق: "=== WORKOUT SESSION TIMER ==="
  6. عرض إعداد الجلسة: "Setting up workout session..."
  7. لكل تمرين، اعرض: "Exercise: [exercise_name] - Duration: [duration_object]"
  8. عرض فترة الراحة: "Rest period between exercises: [rest_duration_object]"
  9. حساب وعرض تفاصيل الجلسة:
    • "=== SESSION BREAKDOWN ==="
    • لكل تمرين: "[exercise_name]: [duration_in_seconds] seconds"
    • "Rest periods: [rest_duration_in_seconds] seconds each"
  10. حساب إجمالي وقت الجلسة (مجموع مدد جميع التمارين بالإضافة إلى فترات الراحة بين التمارين):
    • "=== TIMING CALCULATIONS ==="
    • "Total exercise time: [total_exercise_duration_object]"
    • "Total rest time: [total_rest_duration_object]" (فترات الراحة بين التمارين، أي أقل بواحد من عدد التمارين)
    • "Complete session duration: [total_session_duration_object]"
  11. عرض إحصائيات الجلسة:
    • "=== SESSION STATISTICS ==="
    • "Number of exercises: [number_of_exercises]"
    • "Longest exercise: [longest_exercise_name] ([longest_duration_object])"
    • "Shortest exercise: [shortest_exercise_name] ([shortest_duration_object])"
    • "Average exercise duration: [average_duration_in_seconds] seconds"
  12. عرض تحويلات الوقت:
    • "=== TIME CONVERSIONS ==="
    • "Session duration in minutes: [total_minutes]" (تحويل إجمالي مدة الجلسة إلى دقائق)
    • "Session duration in hours: [total_hours]" (تحويل إجمالي مدة الجلسة إلى ساعات، وتظهر كعدد عشري)
  13. عرض رسالة الإكمال: "Workout session timer configured successfully"

استخدم حزمة time للتعامل مع المدد الزمنية، وحزمة strings لتقسيم السلاسل النصية المدخلة، وحزمة strconv لتحويل الأرقام النصية إلى أعداد صحيحة، وحزمة fmt للمخرجات المنسقة. تذكر أنه يمكن إضافة قيم time.Duration معاً وتحويلها إلى وحدات مختلفة باستخدام طرق مثل Seconds() و Minutes() و Hours(). يوضح هذا التحدي كيفية إنشاء ومعالجة قيم المدة لتطبيقات التوقيت.

ورقة مرجعية

توفر لغة Go النوع time.Duration لتمثيل فترات زمنية بين لحظتين.

قم بإنشاء المدد الزمنية باستخدام ثوابت محددة مسبقاً مضروبة في أعداد صحيحة:

tenMinutes := 10 * time.Minute
twoHours := 2 * time.Hour
thirtySeconds := 30 * time.Second

تشمل ثوابت المدة الزمنية الشائعة ما يلي:

  • time.Nanosecond
  • time.Microsecond
  • time.Millisecond
  • time.Second
  • time.Minute
  • time.Hour

يمكن جمع قيم المدة الزمنية معاً وتحويلها إلى وحدات مختلفة باستخدام دوال مثل Seconds() و Minutes() و Hours().

جرّب بنفسك

package main

import (
	"fmt"
	"strconv"
	"strings"
	"time"
)

func main() {
	// قراءة المدخلات
	var exerciseInput string
	var restInput string
	fmt.Scanln(&exerciseInput)
	fmt.Scanln(&restInput)
	
	// تحليل التمارين من المدخلات
	exerciseEntries := strings.Split(exerciseInput, ",")
	
	// تحليل فترة الراحة من المدخلات
	restParts := strings.Split(restInput, ":")
	
	// TODO: اكتب الكود الخاص بك أدناه
	// 1. قم بتحليل كل إدخال تمرين لاستخراج الاسم وقيمة المدة والوحدة
	// 2. قم بتحويل قيم المدة إلى أعداد صحيحة وإنشاء كائنات time.Duration
	// 3. قم بتحليل مدة الراحة وإنشاء كائن time.Duration
	// 4. عرض معلومات جلسة التمرين والحسابات
	// 5. حساب إحصائيات الجلسة وتحويلات الوقت
	
	// تذكر إخراج جميع المعلومات المطلوبة كما هو محدد في التحدي
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow