مراجعة - مؤقت بسيط
جزء من قسم Logic & Flow في رحلة GO على Coddy — الدرس 65 من 68.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
التحدي
سهلقم بإنشاء تطبيق مؤقت عد تنازلي يستخدم time.NewTicker للعد التنازلي من مدة محددة إلى الصفر، مع عرض رسائل التقدم على فترات منتظمة. سيختبر هذا التحدي قدرتك على الجمع بين الـ tickers، والحلقات التكرارية (loops)، وحسابات المدة (duration calculations) لإنشاء تطبيق توقيت وظيفي.
ستتلقى مدخلين:
- سلسلة نصية تحتوي على مدة العد التنازلي بتنسيق
"value:unit"(على سبيل المثال،"10:Second"أو"3:Minute") - سلسلة نصية تحتوي على فاصل التحديث الزمني بتنسيق
"value:unit"(على سبيل المثال،"1:Second")
مهمتك هي:
- تحليل المدخل الأول عن طريق التقسيم عند النقطتين الرأسيتين لاستخراج قيمة مدة العد التنازلي ووحدتها
- تحليل المدخل الثاني عن طريق التقسيم عند النقطتين الرأسيتين لاستخراج قيمة فاصل التحديث ووحدتها
- تحويل القيم النصية إلى أعداد صحيحة باستخدام حزمة
strconv - إنشاء كائنات
time.Durationلكل من مدة العد التنازلي وفاصل التحديث باستخدام الثوابت المناسبة:- بالنسبة لـ
"Second": اضرب فيtime.Second - بالنسبة لـ
"Minute": اضرب فيtime.Minute - بالنسبة لـ
"Hour": اضرب فيtime.Hour
- بالنسبة لـ
- عرض رأس المؤقت:
"=== COUNTDOWN TIMER ===" - عرض إعداد المؤقت:
"Starting countdown from [countdown_duration_object]" - عرض تكرار التحديث:
"Updates every [update_interval_object]" - إنشاء ticker باستخدام
time.NewTickerمع مدة فاصل التحديث - تهيئة متغير للوقت المتبقي بمدة العد التنازلي
- استخدام حلقة تكرارية للعد التنازلي:
- انتظار كل حدث ticker باستخدام
<-ticker.C - طرح فاصل التحديث من الوقت المتبقي
- إذا كان الوقت المتبقي أكبر من 0، اعرض:
"Time remaining: [remaining_time_object]" - إذا كان الوقت المتبقي 0 أو أقل، اعرض:
"Time's up!"واخرج من الحلقة
- انتظار كل حدث ticker باستخدام
- إيقاف الـ ticker باستخدام
ticker.Stop() - عرض إحصائيات الإكمال:
"=== TIMER COMPLETE ===""Original duration: [countdown_duration_object]""Update interval: [update_interval_object]""Total updates displayed: [number_of_updates]"(احسب عدد المرات التي تم فيها عرض الوقت المتبقي)
- عرض رسالة الإكمال:
"Countdown timer finished successfully"
استخدم حزمة time لعمليات الـ ticker والمدة، وحزمة strings لتقسيم السلاسل النصية المدخلة، وحزمة strconv لتحويل السلاسل النصية إلى أعداد صحيحة، وحزمة fmt للإخراج. تذكر أن time.NewTicker يعيد ticker يرسل قيمًا عبر قناته (channel) على فترات منتظمة، ويجب عليك استدعاء ticker.Stop() عند الانتهاء لتحرير الموارد. يوضح هذا التحدي كيفية إنشاء مؤقت عد تنازلي عملي باستخدام آليات التوقيت في Go.
جرّب بنفسك
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// قراءة المدخلات
var countdownInput string
var intervalInput string
fmt.Scanln(&countdownInput)
fmt.Scanln(&intervalInput)
// تحليل مدخلات مدة العد التنازلي
countdownParts := strings.Split(countdownInput, ":")
countdownValue, _ := strconv.Atoi(countdownParts[0])
countdownUnit := countdownParts[1]
// تحليل مدخلات فاصل التحديث الزمني
intervalParts := strings.Split(intervalInput, ":")
intervalValue, _ := strconv.Atoi(intervalParts[0])
intervalUnit := intervalParts[1]
// TODO: اكتب الكود الخاص بك أدناه
// التحويل إلى كائنات time.Duration باستخدام جمل switch
// إنشاء مؤقت العد التنازلي (محاكاة بدون تأخير فعلي لأغراض الاختبار)
// تنفيذ حلقة العد التنازلي
// عرض جميع الرسائل والإحصائيات المطلوبة
// ملاحظة: لأغراض الاختبار، قم بمحاكاة سلوك المؤقت بدون تأخير زمني حقيقي
}جميع دروس Logic & Flow
1تدفق التحكم المتقدم
جملة Switch مع `fallthrough`الخروج من الحلقات المتداخلةالاستمرار في حلقة محددةجملة `goto`ملخص - التحكم المتقدم في الحلقات7معالجة الأخطاء بعمق
أنواع الأخطاء المخصصةتغليف الأخطاء باستخدام `%w`فك التغليف باستخدام `errors.Is`فك التغليف باستخدام `errors.As`فهم `panic`استخدام `recover`ملخص - القسمة الآمنة10التعامل مع الوقت
الحصول على الوقت الحاليإنشاء وقت محددتنسيق الوقتتحليل النصوص الزمنيةالمدة الزمنيةالعمليات الحسابية على الوقتالانتظار والـ Tickersمراجعة - مؤقت بسيط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)ملخص - الأشكال والسلوكيات