تستخدم حلقات الـ Do-While في لغة Dart لتنفيذ كتلة من الشيفرة مرة واحدة على الأقل، ثم تكرارها بناءً على شرط محدد. وتستمر في تنفيذ الكود داخل الحلقة طالما أن الشرط يعود صحيحًا، حتى يتم تغيير الشرط ليكون غير صحيح.
do { // الشيفرة التي تريد تنفيذها } while (شرط);
حيث يتم تنفيذ الشيفرة داخل القوسين الزوجين أولاً، ثم يتم التحقق من الشرط. إذا كان الشرط صحيحًا، يتم تكرار تنفيذ الشيفرة، وإذا كان خطأ، يتم الخروج من الحلقة.
void main() { int counter = 0; do { print('العداد: $counter'); counter++; } while (counter < 5); }
في هذا المثال، يتم تعريف متغير counter بقيمة صفر. ثم يتم استخدام حلقة Do-While لطباعة قيمة المتغير counter ثم زيادة قيمته بمقدار واحد، وذلك طالما أن قيمة counter أقل من 5. سيتم طباعة القيم من 0 إلى 4، وبعد ذلك يتم الخروج من الحلقة.
حلقات Do-While في لغة البرمجة Dart توفر وسيلة مهمة لتكرار تنفيذ قطعة من الشيفرة بناءً على شرط معين. إليك بعض الأهميات والاستخدامات الرئيسية لهذه الحلقات:
تنفيذ الشيفرة مرة واحدة على الأقل: تضمن حلقة Do-While أن الشيفرة داخل الحلقة تنفذ على الأقل مرة واحدة، حتى لو كان الشرط غير صحيح من البداية.
تنفيذ متكرر بناءً على شرط محدد: تسمح حلقات Do-While بتنفيذ الشيفرة داخلها مرارًا وتكرارًا حتى يتم تحقيق الشرط المحدد. هذا يوفر طريقة مرنة لتكرار تنفيذ الشيفرة حسب الحاجة.
التحقق من الشرط في نهاية الحلقة: يعني وجود حلقة Do-While أن الشيفرة داخلها تنفذ قبل التحقق من الشرط، وبالتالي يضمن وجود حلقة Do-While أن الشيفرة ستُنفذ على الأقل مرة واحدة.
معالجة البيانات والتكرار عبر قائمة أو تسلسل: تُستخدم حلقات Do-While في العديد من السيناريوهات مثل معالجة العناصر في قوائم أو تكرار التنفيذ حتى يتحقق شرط معين.
التعامل مع المدخلات والمخرجات الخارجية: يمكن استخدام حلقات Do-While لتنفيذ مهام تتطلب التفاعل مع المستخدم مثل تحقق صحة المدخلات واستمرار في تكرار السؤال حتى يتم إدخال قيمة صالحة.
باختصار، تُستخدم حلقات Do-While في Dart لتنفيذ قطعة من الشيفرة مرارًا وتكرارًا بناءً على شرط محدد، وتوفر وسيلة فعّالة للتحكم في تكرار التنفيذ والتفاعل مع المدخلات والمخرجات.
هاكم مثالًا شاملاً يستخدم حلقة Do-While في لغة Dart. سنقوم بكتابة برنامج بسيط يطلب من المستخدم إدخال رقم، وسنستمر في طلب الرقم مرارًا وتكرارًا حتى يتم إدخال رقم سليم (أي رقم صحيح).
import 'dart:io'; void main() { int number; bool isValid = false; do { stdout.write('الرجاء إدخال رقم صحيح: '); String input = stdin.readLineSync()!; try { number = int.parse(input); isValid = true; } catch (e) { print('خطأ: يجب إدخال رقم صحيح.'); } } while (!isValid); print('لقد قمت بإدخال الرقم الصحيح: $number'); }
في هذا المثال، لدينا حلقة Do-While تقوم بطلب إدخال رقم من المستخدم داخلها. ثم يتم محاولة تحويل الإدخال إلى عدد صحيح باستخدام دالة int.parse()، إذا نجحت هذه العملية، يتم تعيين isValid إلى true ويتم الخروج من الحلقة. إذا فشل التحويل (بسبب إدخال غير صالح)، ستطبع رسالة خطأ وسيتم طلب الإدخال مرة أخرى.
هذا المثال يظهر كيفية استخدام حلقة Do-While لضمان أن المستخدم يدخل قيمة صحيحة، وكيفية التفاعل مع المدخلات والمخرجات لتطبيق سيناريو حقيقي.
هاكم عدة أمثلة شاملة مع الشرح على كيفية استخدام حلقات Do-While في لغة Dart في سيناريوهات مختلفة:
import 'dart:io'; void main() { int sum = 0; int count = 0; double average; String input; bool isValid = false; do { stdout.write('الرجاء إدخال رقم (أدخل 0 للخروج): '); input = stdin.readLineSync()!; try { int number = int.parse(input); if (number != 0) { sum += number; count++; } else { isValid = true; } } catch (e) { print('خطأ: يجب إدخال رقم صحيح.'); } } while (!isValid); if (count != 0) { average = sum / count; print('المتوسط: $average'); } else { print('لم يتم إدخال أي أرقام.'); } }
شرح: في هذا المثال، نقوم بطلب إدخال الأرقام من المستخدم وحساب متوسطها. تتواصل الحلقة مع طلب الإدخال حتى يتم إدخال الرقم صفر، ثم تتوقف. إذا كان هناك أرقام مدخلة، يتم حساب المتوسط وطباعته، وإلا يتم عرض رسالة بأنه لم يتم إدخال أي أرقام.
void main() { int start = 1; int end = 10; print('الأرقام الفردية بين $start و $end:'); do { if (start % 2 != 0) { print(start); } start++; } while (start <= end); }
شرح: في هذا المثال، يتم عرض الأرقام الفردية بين رقمين محددين. تتواصل الحلقة في زيدة الرقم المبدئي start بمقدار واحد مع فحص كل رقم إذا كان فرديًا أم لا. تستمر الحلقة حتى يتم الوصول إلى الرقم النهائي end.
import 'dart:io'; void main() { String input; bool isValid = false; do { stdout.write('هل أنت موافق على الشروط؟ (نعم/لا): '); input = stdin.readLineSync()!.toLowerCase(); if (input == 'نعم' || input == 'لا') { isValid = true; } else { print('يرجى الرد بنعم أو لا فقط.'); } } while (!isValid); if (input == 'نعم') { print('شكرًا لك على الموافقة.'); } else { print('نأسف لعدم الموافقة.'); } }
شرح: في هذا المثال، يتم طلب موافقة المستخدم على شروط معينة. يستمر البرنامج في طلب الإدخال حتى يتم إدخال “نعم” أو “لا”، ثم يقوم بطباعة رسالة توافق أو عدم موافقة وفقًا للإدخال.
هذه هي بعض الأمثلة الشاملة التي توضح استخدامات حلقات Do-While في لغة Dart. تُستخدم هذه الحلقات بشكل شائع لتكرار تنفيذ الشيفرة بناءً على شروط معينة مما يوفر مرونة في التحكم والتفاعل مع التطبيقات.
import 'dart:io'; void main() { String password; bool isValid = false; do { stdout.write('الرجاء إدخال كلمة المرور: '); password = stdin.readLineSync()!; // يمكنك إجراء المزيد من الفحوصات هنا، مثل التحقق من الطول والمتطلبات الأخرى لكلمة المرور if (password.length >= 6) { isValid = true; } else { print('كلمة المرور يجب أن تحتوي على 6 أحرف على الأقل.'); } } while (!isValid); print('تم قبول كلمة المرور.'); }
شرح: في هذا المثال، يتم طلب إدخال كلمة مرور من المستخدم وتحقق من صحتها. تستمر الحلقة في طلب إدخال كلمة مرور حتى يتم إدخال كلمة مرور تحتوي على 6 أحرف على الأقل.
import 'dart:io'; void main() { bool isComplete = false; do { stdout.write('يتم تحميل الملف... '); // يمكنك هنا استدعاء دالة أو تنفيذ أي عملية تحميل // تفترض هذه الخطوة أن التحميل اكتملت بنجاح isComplete = true; print('تم الانتهاء.'); } while (!isComplete); }
شرح: في هذا المثال، يتم تكرار عملية التحميل حتى يتم اكتمالها بنجاح. يمكنك استدعاء الدوال اللازمة لتنفيذ عملية التحميل، وتحديث قيمة isComplete إلى true عند اكتمال التحميل بنجاح.
هذه الأمثلة توضح مجموعة متنوعة من الاستخدامات لحلقات Do-While في Dart، بدءًا من التحقق من مدخلات المستخدم إلى تكرار عمليات معينة حتى تكتمل بنجاح.
لنقم بكتابة تطبيق شامل يستخدم حلقة Do-While في لغة Dart. سنقوم ببناء برنامج بسيط لحساب معدل درجات الطلاب، حيث سيقوم المستخدم بإدخال درجاتهم، وسنقوم بحساب متوسط الدرجات باستخدام حلقة Do-While. سنستمر في طلب إدخال الدرجات حتى يتم إدخال القيمة -1 كإشارة للخروج. بعد ذلك، سيتم حساب المتوسط وطباعته.
import 'dart:io'; void main() { int total = 0; int count = 0; double average; int grade; // استخدم حلقة do-while للسماح بإدخال الدرجات مرارًا وتكرارًا حتى يتم إدخال -1 do { stdout.write('الرجاء إدخال الدرجة (-1 للخروج): '); String input = stdin.readLineSync()!; try { grade = int.parse(input); if (grade != -1) { total += grade; count++; } } catch (e) { print('الرجاء إدخال درجة صحيحة.'); } } while (grade != -1); if (count > 0) { average = total / count; print('متوسط الدرجات: $average'); } else { print('لم يتم إدخال أي درجات.'); } }
نقوم بتعريف المتغيرات اللازمة مثل total لحساب مجموع الدرجات، وcount لعدد الدرجات المدخلة، وaverage لحساب المتوسط.
نستخدم حلقة Do-While لطلب إدخال الدرجات من المستخدم مرارًا وتكرارًا حتى يتم إدخال القيمة -1.
داخل الحلقة، نقوم بتحويل الإدخال إلى عدد صحيح باستخدام int.parse()، ثم نضيف الدرجة إلى المجموع الإجمالي ونزيد عدد الدرجات المدخلة بمقدار واحد.
إذا تم إدخال -1، يتم الخروج من الحلقة ويتم حساب المتوسط وطباعته.
في النهاية، إذا لم يتم إدخال أي درجات، سيتم طباعة رسالة تفيد بذلك.
هذا المثال يظهر كيفية استخدام حلقة Do-While في تطبيق فعلي لحساب متوسط درجات الطلاب، ويوضح كيفية التفاعل مع مدخلات المستخدم وتكرار تنفيذ الشيفرة بناءً على شروط محددة.
هاكم تطبيقا آخرا يستخدم حلقة Do-While في لغة Dart.
سنقوم في هذا التطبيق بكتابة برنامج يطلب من المستخدم إدخال سلسلة من الأسماء، وسيقوم البرنامج بطباعة الأسماء المدخلة بعد ذلك. سنستخدم حلقة Do-While للسماح للمستخدم بإدخال الأسماء مرارًا وتكرارًا حتى يختار التوقف.
import 'dart:io'; void main() { List<String> names = []; String name; String choice; // استخدم حلقة do-while للسماح بإدخال الأسماء مرارًا وتكرارًا do { stdout.write('الرجاء إدخال اسم: '); name = stdin.readLineSync()!; names.add(name); stdout.write('هل تريد إدخال اسم آخر؟ (نعم/لا): '); choice = stdin.readLineSync()!; } while (choice.toLowerCase() == 'نعم'); print('الأسماء التي تم إدخالها:'); for (var name in names) { print(name); } }
نقوم بتعريف قائمة (List) تدعى names لتخزين الأسماء التي يقوم المستخدم بإدخالها.
نستخدم حلقة Do-While لطلب إدخال الأسماء من المستخدم مرارًا وتكرارًا.
داخل الحلقة، نطلب من المستخدم إدخال اسم، ثم نضيفه إلى قائمة الأسماء.
نطلب من المستخدم إدخال اختياره بين إدخال اسم جديد أو التوقف.
إذا اختار المستخدم إدخال اسم جديد (الإجابة ‘نعم’)، فإن الحلقة تستمر. وإذا اختار التوقف (الإجابة ‘لا’)، فإن الحلقة تتوقف ويتم طباعة الأسماء التي تم إدخالها.
هذا التطبيق يوضح كيفية استخدام حلقة Do-While لطلب إدخال البيانات من المستخدم متكررًا حتى يقرر التوقف، ويظهر كيفية استخدام القوائم لتخزين وإدارة البيانات.
هاكم اختبارا يختبر فهمك لاستخدام حلقة Do-While في لغة Dart. سيتم تقديم سؤال مع خيارات متعددة الاختيارات، وستحتاج إلى اختيار الإجابة الصحيحة مع شرح لها.
أ) حلقة Do-While تنفذ الشيفرة داخلها على الأقل مرة واحدة حتى يتحقق الشرط، بينما حلقة While قد لا تنفذ الشيفرة إذا كان الشرط غير صحيح من البداية.
ب) حلقة Do-While تحتوي على شرط في نهاية الحلقة، بينما حلقة While تحتوي على شرط في بداية الحلقة.
ج) لا يوجد فرق بينهما، حلقة Do-While وحلقة While تقومان بنفس الوظيفة.
د) حلقة Do-While تنفذ الشيفرة داخلها دائماً على الأقل مرة واحدة، بينما قد لا تنفذ حلقة While الشيفرة إذا كان الشرط غير صحيح.
الشرح:
الجواب الصحيح هو (د). حلقة Do-While تنفذ الشيفرة داخلها على الأقل مرة واحدة، حتى لو كان الشرط غير صحيح من البداية، بينما قد لا تنفذ حلقة While الشيفرة إذا كان الشرط غير صحيح.
أ)
do { // الشيفرة التي تريد تنفيذها } while (شرط);
ب)
do { // الشيفرة التي تريد تنفيذها } while (شرط) { // الشيفرة الإضافية }
ج)
while (شرط) { // الشيفرة التي تريد تنفيذها }
د)
while (شرط) { // الشيفرة التي تريد تنفيذها }
int i = 0; do { print(i); i++; } while (i < 5);
أ) يطبع الأعداد من 1 إلى 5.
ب) يطبع الأعداد من 0 إلى 4.
ج) يطبع الأعداد من 0 إلى 5.
د) لا يقوم بطباعة أي شيء.
أ) الشرط الذي يكون قيمته صفر.
ب) الشرط الذي يكون قيمته صحيحة (true).
ج) الشرط الذي يكون قيمته خطأ (false).
د) الشرط الذي يكون قيمته عدد سلبي.
أ) في بداية الحلقة.
ب) في نهاية الحلقة.
ج) قبل كل تنفيذ للشيفرة داخل الحلقة.
د) بعد كل تنفيذ للشيفرة داخل الحلقة.
ب) تنفيذ الشيفرة داخلها على الأقل مرة واحدة حتى يتحقق الشرط.
أ)
do {
// الشيفرة التي تريد تنفيذها
} while (شرط);
ج) يطبع الأعداد من 0 إلى 4.
ب) الشرط الذي يكون قيمته صحيحة (true).
أ) في بداية الحلقة.
int x = 10; do { print(x); x -= 2; } while (x > 0);
أ) يطبع الأعداد من 10 إلى 1 بخطوة -2.
ب) يطبع الأعداد من 10 إلى 1 بخطوة 2.
ج) لا يقوم بطباعة أي شيء.
د) يطبع الأعداد من 10 إلى 0 بخطوة -2.
أ) يجب أن يتم تغيير الشرط ليصبح غير صحيح.
ب) يجب أن يكون الشرط صحيحًا.
ج) يجب أن يكون الشرط خاطئًا.
د) يجب أن يتم تغيير الشرط ليصبح صحيحًا.
int y = 5; do { y++; } while (false);
أ) الحلقة تنفذ مرة واحدة فقط.
ب) الحلقة تنفذ بشكل لامتناهي.
ج) الحلقة لا تنفذ أبدًا.
د) يتم زيادة قيمة المتغير y إلى 6.
أ) بعد كل تنفيذ للشيفرة داخل الحلقة.
ب) في نهاية الحلقة.
ج) قبل كل تنفيذ للشيفرة داخل الحلقة.
د) في بداية الحلقة.
أ) حلقة Do-While تنفذ الشيفرة داخلها على الأقل مرة واحدة، بينما قد لا تنفذ حلقة While الشيفرة إذا كان الشرط غير صحيح من البداية.
ب) حلقة Do-While تحتوي على شرط في نهاية الحلقة، بينما تحتوي حلقة While على شرط في بداية الحلقة.
ج) لا يوجد فرق بين حلقة Do-While وحلقة While.
د) حلقة Do-While تنفذ الشيفرة داخلها على الأقل مرة واحدة، بينما حلقة While لا تضمن ذلك.
6. أ) يطبع الأعداد من 10 إلى 1 بخطوة -2.
أ) يجب أن يتم تغيير الشرط ليصبح غير صحيح.
ج) الحلقة لا تنفذ أبدًا.
د) في بداية الحلقة.
أ) حلقة Do-While تنفذ الشيفرة داخلها على الأقل مرة واحدة، بينما قد لا تنفذ حلقة While الشيفرة إذا كان الشرط غير صحيح من البداية.
أ) تحتوي حلقة Do-While على شرط في نهاية الحلقة، بينما تحتوي حلقة While على شرط في بداية الحلقة.
ب) يتم تقييم شرط حلقة Do-While قبل كل تنفيذ للشيفرة داخل الحلقة، بينما يتم تقييم شرط حلقة While في نهاية الحلقة.
ج) حلقة Do-While تنفذ الشيفرة داخلها على الأقل مرة واحدة، بينما قد لا تنفذ حلقة While الشيفرة إذا كان الشرط غير صحيح من البداية.
د) لا يوجد فرق بينهما، حلقة Do-While وحلقة While تقومان بنفس الوظيفة.
int n = 1; do { print(n * n); n++; } while (n <= 5);
أ) يطبع الأعداد الأولى من مربعات الأعداد من 1 إلى 5.
ب) يطبع الأعداد الأولى من تتابع الأعداد المربعة من 1 إلى 5.
ج) يطبع الأعداد الأولى من 1 إلى 5.
د) لا يطبع أي شيء.
int m = 10; do { m -= 3; } while (m > 0);
أ) الحلقة تنفذ مرة واحدة فقط.
ب) الحلقة تنفذ بشكل لامتناهي.
ج) الحلقة لا تنفذ أبدًا.
د) يتم زيادة قيمة المتغير m بمقدار 3.
أ) الشرط الذي يكون قيمته صفر.
ب) الشرط الذي يكون قيمته خاطئًا.
ج) الشرط الذي يكون قيمته صحيحة (true).
د) الشرط الذي يكون قيمته عدد سالب.
الإجابات:
11. ج) يتم تنفيذ الشيفرة داخل الحلقة على الإطلاق.
ج) حلقة Do-While تنفذ الشيفرة داخلها على الأقل مرة واحدة، بينما قد لا تنفذ حلقة While الشيفرة إذا كان الشرط غير صحيح من البداية.
أ) يطبع الأعداد الأولى من مربعات الأعداد من 1 إلى 5.
ب) الحلقة تنفذ بشكل لامتناهي.
ج) الشرط الذي يكون قيمته صحيحة (true).