লিঙ্কযুক্ত নিবন্ধটি অবশ্যই ডোনাল্ড নুথের এন + 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
বিকল্পটি আরও ভাল বলে মনে হচ্ছে।