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

جملة `goto`

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

تسمح لك عبارة goto في لغة Go بنقل التحكم مباشرة إلى عبارة ذات تسمية (labeled statement) داخل نفس الدالة. وبينما تتضمن Go هذه الميزة، إلا أنها نادراً ما تُستخدم في برمجة Go الحديثة لأن هياكل التحكم الأكثر وضوحاً مثل الحلقات (loops) وعبارات if تُعد مفضلة.

لاستخدام goto، تقوم أولاً بتعريف تسمية (label) عن طريق كتابة معرف متبوعاً بنقطتين رأسيتين. ثم يمكنك الانتقال إلى تلك التسمية باستخدام goto متبوعاً باسم التسمية.

func main() {
    i := 0
start:
    fmt.Println("Count:", i)
    i++
    if i < 3 {
        goto start
    }
    fmt.Println("Done!")
}

في هذا المثال، يقفز البرنامج عائداً إلى التسمية start حتى لا يعود الشرط مستوفىً. ومع ذلك، فإن هذا المنطق نفسه سيكون أكثر وضوحاً باستخدام حلقة for. يمكن لتعليمة goto أن تجعل الكود أصعب في القراءة والصيانة، ولهذا السبب يتم تجنبها بشكل عام لصالح تدفق التحكم المنظم.

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

challenge icon

التحدي

سهل

في هذا التحدي، ستتدرب على استخدام عبارة goto لإنشاء آلية إعادة محاولة بسيطة. أنت تقوم ببناء نظام اتصال يحاول إنشاء اتصال ويعيد المحاولة لعدد محدد من المرات في حالة الفشل.

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

  • سلسلة نصية تمثل الحد الأقصى لعدد محاولات إعادة المحاولة (على سبيل المثال، "3")
  • سلسلة نصية تمثل رقم المحاولة التي ستنجح (على سبيل المثال، "2")

مهمتك هي:

  1. تحليل الحد الأقصى لمحاولات إعادة المحاولة من المدخل الأول
  2. تحليل رقم محاولة النجاح من المدخل الثاني
  3. استخدام عبارة goto مع تسمية (label) لتنفيذ منطق إعادة المحاولة
  4. البدء بالمحاولة رقم 1 والزيادة بعد كل محاولة فاشلة
  5. لكل محاولة تفشل، اطبع "Attempt [attempt_number] failed"
  6. عندما يتطابق رقم المحاولة مع رقم محاولة النجاح، اطبع "Attempt [attempt_number] succeeded" واخرج
  7. إذا تجاوزت الحد الأقصى لمحاولات إعادة المحاولة دون نجاح، اطبع "All attempts failed" واخرج

استخدم عبارة goto للقفز مرة أخرى إلى تسمية (label) إعادة المحاولة عندما تفشل محاولة ولم تتجاوز الحد الأقصى للمحاولات. يجب أن تبدأ أرقام المحاولات من 1.

ورقة مرجعية

ينقل بيان goto التحكم مباشرة إلى جملة ذات تسمية (labeled statement) داخل نفس الدالة. قم بتعريف تسمية باستخدام معرف متبوع بنقطتين رأسيتين، ثم انتقل إليها باستخدام goto:

func main() {
    i := 0
start:
    fmt.Println("Count:", i)
    i++
    if i < 3 {
        goto start
    }
    fmt.Println("Done!")
}

بينما يتوفر goto في لغة Go، إلا أنه نادراً ما يُستخدم في برمجة Go الحديثة حيث أن تدفق التحكم المنظم مثل الحلقات وجمل if تكون أكثر وضوحاً وأسهل في الصيانة.

جرّب بنفسك

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // قراءة المدخلات
    var maxRetriesStr string
    var successAttemptStr string
    fmt.Scanln(&maxRetriesStr)
    fmt.Scanln(&successAttemptStr)
    
    // تحويل المدخلات إلى أعداد صحيحة
    maxRetries, _ := strconv.Atoi(maxRetriesStr)
    successAttempt, _ := strconv.Atoi(successAttemptStr)
    
    // تهيئة عداد المحاولات
    attempt := 1
    
    // TODO: اكتب الكود الخاص بك أدناه
    // استخدم تعليمة goto مع تسمية (label) لتنفيذ منطق إعادة المحاولة
    
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow