লিঙ্কযুক্ত নিবন্ধটি অবশ্যই ডোনাল্ড নুথের এন + 1/2 লুপ সম্পর্কে সঠিকভাবে পেয়েছে । সি / সি ++ / জাভাতে প্রকাশিত:
for (;;) {
get next element;
if (at the end) break;
process the element;
}
এটি কোনও ফাইলের লাইন বা অক্ষরগুলি পড়ার জন্য, আপনি যদি ইওএফ পৌঁছেছেন কিনা তা পরীক্ষা করে এবং তারপরে প্রক্রিয়াজাতকরণের জন্য এটি দরকারী। আমি প্যাটার্নটি for(;;)..if(..)break;দেখতে এটির অভ্যস্ত যে এটি আমার কাছে বুদ্ধিমান। (নাইট প্রবন্ধটি পড়ার আগে আমি সাহিত্যের প্রোগ্রামিং বইটিতে পুনরায় ছাপা হয়েছিল, এটি "wtf?" হিসাবে ব্যবহৃত হত)
নথ কীওয়ার্ডগুলির পরামর্শ দিয়েছিলেন loop/while/repeat:
loop:
S;
while C:
T;
repeat
শূন্য বা আরও বেশি স্টেটমেন্টের সিরিজ Sএবং যেখানে বুলিয়ান শর্ত হিসাবে স্থানধারক Tএবং Cসেখানে। যদি কোনও Sবিবৃতি না থাকে তবে এটি একটি সময় লুপ হবে এবং যদি কোনও Tবিবৃতি না থাকে তবে এটি ডু লুপ হবে।
এই কনস্ট্রাক্টটি শূন্য বা আরও বেশি while Cক্লজকে অনুমতি দিয়ে সাধারণীকরণ করা যেতে পারে , এটি অসীম লুপগুলি প্রকাশ করার জন্য উপযুক্ত করে তোলে এবং তারপরে এমন কিছু বিরল পরিস্থিতি যাতে দুটি চেক প্রয়োজন।
একই নিবন্ধে, নুথ একটি সিগন্যালিং মেকানিজমটির পরামর্শ দিলেন যা ব্যতিক্রম ছোঁড়া / ধরার স্থানীয় সংস্করণ হবে (গোটো ব্যবহারের বিকল্প হিসাবে)।
আমার জন্য? আমি জাভা টেল-কল অপ্টিমাইজেশান সমর্থন করি, যাতে আমি প্রয়োজন হিসাবে যে কোনও সাধারণ নিয়ন্ত্রণ কাঠামো প্রকাশ করতে পারি ।
আপডেট: আমি উল্লেখ করতে ভুলে গেছি যে অনেক সি / সি ++ / জাভা প্রোগ্রামার শর্তে এমবেডেড অ্যাসাইনমেন্ট ব্যবহার করে এটিকে ঘিরে রাখে while:
while ((c = getc(f)) != -1) {
T;
}
Knuth এর কনস্ট্রাক্ট থেকে পদ ব্যবহার করে, এই মঞ্জুরিযোগ্য যখন Sএবং Cএকটি একক অভিব্যক্তি একত্রিত করা যেতে পারে। কিছু লোক উপরের এম্বেড করা অ্যাসাইনমেন্টটি দেখতে ঘৃণা করেন, আবার কেউ কেউ উপরের এম্বেডটি দেখে ঘৃণা breakকরেন for (;;)। তবে কখন Sএবং Cএকত্রিত করা যায় না, যেমন যখন Sএকাধিক বিবৃতি দেওয়া হয়, for (;;)কোডটি পুনরাবৃত্তি না করেই একমাত্র বিকল্প। অন্য বিকল্পটি হ'ল কোডটির নকল করা S:
S;
while (C) {
T;
S;
}
নোথের loop/while/repeatবিকল্পটি আরও ভাল বলে মনে হচ্ছে।