সবার আগে:
একটি do-while
লুপ একটি হিসাবে একই নয় while
-loop বা for
-loop।
while
এবং for
লুপগুলি লুপের বডিটি চালাতে পারে না।
- একটি
do-while
লুপ সর্বদা কমপক্ষে একবার লুপের বডি চালায় - এটি প্রাথমিক অবস্থার চেকটি এড়িয়ে যায় sk
সুতরাং এটি যৌক্তিক পার্থক্য। এটি বলেছে, প্রত্যেকেই এটিকে কঠোরভাবে অনুসরণ করে না। এটা তোলে জন্য বেশ প্রচলিত while
বা for
লুপ এমনকি যখন এটা যে এটা সবসময় লুপ অন্তত একবার হবে নিশ্চিত করা হয় ব্যবহৃত হবে। (বিশেষত ভাষাগুলি লুপযুক্ত ভাষায় )
সুতরাং আপেল এবং কমলার তুলনা এড়ানোর জন্য, আমি ধরে নিই যে লুপটি সর্বদা কমপক্ষে একবার চালানো হবে। তদ্ব্যতীত, আমি for
আবার লুপগুলি উল্লেখ করব না যেহেতু তারা while
লুপ কাউন্টারটির জন্য মূলত কিছুটা সিনট্যাক্স চিনির সাথে লুপ হয়।
সুতরাং আমি প্রশ্নের উত্তর দেব:
যদি কোনও while
লুপ অন্তত একবার লুপের গ্যারান্টিযুক্ত হয় তবে এর do-while
পরিবর্তে লুপ ব্যবহার করে কোনও কার্যকারিতা পাওয়া যায় ?
একটি do-while
প্রথম শর্ত চেক এড়িয়ে যায়। সুতরাং মূল্যায়ন করার জন্য একটি কম শাখা এবং একটি কম শর্ত রয়েছে।
যদি শর্তটি পরীক্ষা করা ব্যয়বহুল হয় এবং আপনি জানেন যে আপনাকে অন্তত একবার লুপ দেওয়ার নিশ্চয়তা দেওয়া হয়েছে তবে do-while
লুপটি দ্রুততর হতে পারে।
এবং যদিও এটি সর্বোত্তমভাবে একটি মাইক্রো-অপ্টিমাইজেশন হিসাবে বিবেচিত হয়, এটি কম্পাইলার সর্বদা করতে পারে না: বিশেষত যখন সংকলক প্রমাণ করতে অক্ষম হয় যে লুপটি সর্বদা একবার অন্তত একবার প্রবেশ করবে।
অন্য কথায়, একটি সময় লুপ:
while (condition){
body
}
কার্যকরভাবে এই হিসাবে একই:
if (condition){
do{
body
}while (condition);
}
আপনি যদি জানেন যে আপনি সর্বদা অন্তত একবার লুপ করবেন, যদি-বিবৃতিটি বহিরাগত হয়।
একইভাবে সমাবেশ স্তরটিতে, বিভিন্ন লুপগুলি এইভাবে সংকলন করে:
করণীয় লুপ:
start:
body
test
conditional jump to start
যখন লুপ:
test
conditional jump to end
start:
body
test
conditional jump to start
end:
নোট করুন যে শর্তটি নকল হয়ে গেছে। একটি বিকল্প পদ্ধতি হ'ল:
unconditional jump to end
start:
body
end:
test
conditional jump to start
... যা অতিরিক্ত জাম্পের জন্য সদৃশ কোড দূরে ব্যবসা করে।
যেভাবেই হোক, এটি এখনও সাধারণ do-while
লুপের চেয়ে খারাপ worse
এটি বলেছিল, সংকলকরা যা চায় তা করতে পারে। এবং যদি তারা প্রমাণ করতে পারে যে লুপটি সর্বদা একবার প্রবেশ করে, তবে এটি আপনার পক্ষে কাজটি করেছে।
প্রশ্নগুলিতে নির্দিষ্ট উদাহরণের জন্য বিষয়গুলি কিছুটা অদ্ভুত কারণ এটির খালি লুপের দেহ রয়েছে। যেহেতু কোন শরীর, সেখানে মধ্যে কোনো যৌক্তিক পার্থক্য while
এবং do-while
।
FWIW, আমি ভিজ্যুয়াল স্টুডিও 2012 এ এটি পরীক্ষা করেছি:
খালি শরীর সঙ্গে, এটা আসলে একই কোড জেনারেট করে while
এবং do-while
। সুতরাং সেই অংশটি সম্ভবত পুরানো দিনের অবশিষ্টাংশ যখন সংকলকরা এত দুর্দান্ত ছিল না।
তবে খালি খালি শরীরের সাথে, ভিএস ২০১২ শর্তের কোডটির সদৃশতা এড়াতে পরিচালনা করে, তবে এখনও অতিরিক্ত শর্তযুক্ত জাম্প উত্পন্ন করে।
সুতরাং এটি বিদ্রূপজনক যে প্রশ্নটিতে উদাহরণটি হাইলাইট করে যে কেন do-while
সাধারণ ক্ষেত্রে একটি লুপ দ্রুত হতে পারে, উদাহরণটি নিজেই আধুনিক সংকলকটিতে কোনও লাভ দেয় বলে মনে হয় না।
মন্তব্যটি কত পুরনো ছিল তা বিবেচনা করে, আমরা কেবল এটি অনুমান করতে পারি যে এটি কেন গুরুত্বপূর্ণ। এটি খুব সম্ভব যে সেই সময়কার সংকলকরা শরীরে শূন্য ছিল তা বুঝতে সক্ষম নন। (বা যদি তারা করেন তবে তারা তথ্যটি ব্যবহার করেননি।)