الفرق بين الحلقات التكرارية

السلام عليكم

مالفرق بين الحلقات الثلاث في لغة جافا for - while -do while

ومتي يكون استخدام احدها افضل من غيرها


التعليق السابق

مثالك يعتمد على التلاعب وكما ذكرت في التعليق الأول

كونك تستطيع استخدام for و while بدلا من do-while في بعض الحالات باستخدام (خطوات اضافية) فهذا لا ينفي وجود اختلاف جوهري بينهم يرجع (للحالات المصممة لها) وقت تصميم اللغة

من حيث الأصل تحويل do ل while يتم بهذا الشكل

    do{
         loop_body
    }while(not_valid_condition) 

====>

        loop_body

    while(not_valid_condition){
        loop_body
    }

والأفضل في هذه الحالات هو استخدام do بدلا من استخدام خطوات اضافية مثل التلاعب أو تكرار الكود

الفرق الوحيد في النتيجة بين الوايل والدو وايل يظهر فقط وفقط اذا كان شرط التكرار خاطئ من البداية

إذا كنت تقصد ناتج التنفيذ فنعم صحيح، أما إذا كان الناتج المترجم (اسمبلي) فلا ليس صحيح تماما do تحتوي علي conditional jump فقط أما while فتحتوي على conditional jump و unconditional jump وهو بالطبع فارق غير مهم للمطورين الأن فمع قيام الكمبيلر بعملية ال optimization سيقوم بloop unrolling . ولكنه يظل فرق مهم لفهم كيف تحدث الاشياء على أدني مستوي

يبدوا أننا متفقين وإنما الاختلاف بيينا لفظي

أعلم بوجود فروق بين الحلقات الثلاث

لكن هذه الفروق أنا أسميها فروق هامشية لا جوهرية على اعتبار أنه يمكن التبديل بين اللوبات مع الحصول على نفس النتيجة مع مراعاة أن السائل هنا لا يهمه تفاصيل الاسمبلي أو البايت كود الناتجة والظن أيضاً أن السائل يسأل عن الفروق التي تمايز بين نتيجة اختيار اللوبات

فأردت تنبيهه أنه لا تمايز ويمكنه الحصول على نفس النتيجة بأي لوب

بينما أنت تسمي هذه الفروق بالجوهرية لاعتبارات أخرى

ففي حقيقة الأمر نحن متفقين وإن كنا نستخدم الفاظا مختلفة

احترامي لك

وشكراً لاضافاتك المفيدة

محبتي

شكرا على نقاشكما الهادف والمفيد 💜