المدة الزمنية
جزء من قسم 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. يمكنك ضرب هذه الثوابت في أعداد صحيحة لإنشاء المدة المحددة التي تحتاجها.
تعد قيم المدة ضرورية للحسابات الزمنية، وعمليات الجدولة، والتحكم في التوقيت في برامجك. وهي تعمل بسلاسة مع وظائف الوقت الأخرى وتوفر طريقة واضحة وقابلة للقراءة للتعبير عن الفترات الزمنية في التعليمات البرمجية الخاصة بك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
التحدي
سهلقم بإنشاء مؤقت لجلسة تمارين رياضية يستخدم 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")
مهمتك هي:
- تحليل المدخل الأول عن طريق تقسيمه عند الفواصل للحصول على إدخالات التمارين الفردية
- لكل إدخال تمرين، قم بالتقسيم عند النقطتين الرأسيتين لاستخراج اسم التمرين، وقيمة المدة (كسلسلة نصية)، ووحدة المدة
- تحليل المدخل الثاني عن طريق التقسيم عند النقطتين الرأسيتين للحصول على قيمة ووحدة مدة الراحة
- تحويل قيم المدة من سلاسل نصية إلى أعداد صحيحة وإنشاء كائنات
time.Durationباستخدام الثوابت المناسبة:- بالنسبة لـ
"Second": اضرب فيtime.Second - بالنسبة لـ
"Minute": اضرب فيtime.Minute - بالنسبة لـ
"Hour": اضرب فيtime.Hour
- بالنسبة لـ
- عرض رأس التطبيق:
"=== WORKOUT SESSION TIMER ===" - عرض إعداد الجلسة:
"Setting up workout session..." - لكل تمرين، اعرض:
"Exercise: [exercise_name] - Duration: [duration_object]" - عرض فترة الراحة:
"Rest period between exercises: [rest_duration_object]" - حساب وعرض تفاصيل الجلسة:
"=== SESSION BREAKDOWN ==="- لكل تمرين:
"[exercise_name]: [duration_in_seconds] seconds" "Rest periods: [rest_duration_in_seconds] seconds each"
- حساب إجمالي وقت الجلسة (مجموع مدد جميع التمارين بالإضافة إلى فترات الراحة بين التمارين):
"=== TIMING CALCULATIONS ===""Total exercise time: [total_exercise_duration_object]""Total rest time: [total_rest_duration_object]"(فترات الراحة بين التمارين، أي أقل بواحد من عدد التمارين)"Complete session duration: [total_session_duration_object]"
- عرض إحصائيات الجلسة:
"=== 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"
- عرض تحويلات الوقت:
"=== TIME CONVERSIONS ===""Session duration in minutes: [total_minutes]"(تحويل إجمالي مدة الجلسة إلى دقائق)"Session duration in hours: [total_hours]"(تحويل إجمالي مدة الجلسة إلى ساعات، وتظهر كعدد عشري)
- عرض رسالة الإكمال:
"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.Nanosecondtime.Microsecondtime.Millisecondtime.Secondtime.Minutetime.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. حساب إحصائيات الجلسة وتحويلات الوقت
// تذكر إخراج جميع المعلومات المطلوبة كما هو محدد في التحدي
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1تدفق التحكم المتقدم
جملة Switch مع `fallthrough`الخروج من الحلقات المتداخلةالاستمرار في حلقة محددةجملة `goto`ملخص - التحكم المتقدم في الحلقات2الـ Structs والميثودز (Methods)
تعريف الـ Methods على الـ Structsالـ Value Receiversالـ Pointer Receiversاختيار الـ Receiversالـ Methods مقابل الـ Functionsملخص - سلوك الـ Struct5تعمق في الـ Maps
Maps من نوع Structsالـ Pointers كقيم في الـ Mapsالتحقق من الـ Nil Mapsمقارنة الـ Mapsمراجعة - عداد تكرار الكلمات3الواجهات (الأساسيات)
ما هي الواجهة؟تعريف الواجهةتطبيق الواجهةاستخدام أنواع الواجهاتالواجهة الفارغةتأكيدات النوع (Type Assertions)تبديل النوع (Type Switch)ملخص - الأشكال والسلوكيات