السلام عليكم
مالفرق بين الحلقات الثلاث في لغة جافا 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 . ولكنه يظل فرق مهم لفهم كيف تحدث الاشياء على أدني مستوي
يبدوا أننا متفقين وإنما الاختلاف بيينا لفظي
أعلم بوجود فروق بين الحلقات الثلاث
لكن هذه الفروق أنا أسميها فروق هامشية لا جوهرية على اعتبار أنه يمكن التبديل بين اللوبات مع الحصول على نفس النتيجة مع مراعاة أن السائل هنا لا يهمه تفاصيل الاسمبلي أو البايت كود الناتجة والظن أيضاً أن السائل يسأل عن الفروق التي تمايز بين نتيجة اختيار اللوبات
فأردت تنبيهه أنه لا تمايز ويمكنه الحصول على نفس النتيجة بأي لوب
بينما أنت تسمي هذه الفروق بالجوهرية لاعتبارات أخرى
ففي حقيقة الأمر نحن متفقين وإن كنا نستخدم الفاظا مختلفة
احترامي لك
وشكراً لاضافاتك المفيدة
محبتي
التعليقات