নিম্নলিখিত কোড বিবেচনা করুন:
public void doSomething(int input)
{
while(true)
{
TransformInSomeWay(input);
if(ProcessingComplete(input))
break;
DoSomethingElseTo(input);
}
}
ধরে নিন যে এই প্রক্রিয়াটি একটি সীমাবদ্ধ তবে ইনপুট-নির্ভর সংখ্যক পদক্ষেপের সাথে জড়িত; লুপটি অ্যালগরিদমের ফলস্বরূপ নিজে থেকে শেষ করতে ডিজাইন করা হয়েছে এবং এটি অনির্দিষ্টকালের জন্য চালানোর জন্য ডিজাইন করা হয়নি (বাইরের কোনও ইভেন্ট দ্বারা বাতিল না হওয়া পর্যন্ত)। কারণ লুপটি শেষ হওয়া উচিত কিনা তা পরীক্ষাটি একটি লজিকাল ধাপের মধ্যবর্তী স্থানে রয়েছে, যদিও লুপটি নিজেই বর্তমানে অর্থবহ কিছু পরীক্ষা করে না; পরিবর্তে ধারণাগত অ্যালগরিদমের মধ্যে "যথাযথ" জায়গায় পরীক্ষা করা হয়।
আমাকে বলা হয়েছিল যে এটি একটি খারাপ কোড, কারণ লুপ কাঠামোর দ্বারা শেষের শর্তটি পরীক্ষা না করায় এটি আরও বাগ প্রবণ। আপনি কীভাবে লুপটি থেকে বেরিয়ে আসবেন তা নির্ধারণ করা আরও কঠিন, এবং বাগগুলি আমন্ত্রণ জানাতে পারে কারণ ব্রেকিং শর্তটি বাইপাস করা যেতে পারে বা দুর্ঘটনাক্রমে ভবিষ্যতের পরিবর্তনগুলি দেওয়া যেতে পারে।
এখন, কোডটি নিম্নরূপে কাঠামোগত হতে পারে:
public void doSomething(int input)
{
TransformInSomeWay(input);
while(!ProcessingComplete(input))
{
DoSomethingElseTo(input);
TransformInSomeWay(input);
}
}
তবে, এটি ডিআরওয়াই লঙ্ঘন করে কোডের কোনও পদ্ধতিতে কলটিকে নকল করে; TransformInSomeWay
পরে যদি অন্য কোনও পদ্ধতির সাথে প্রতিস্থাপন করা হয়, তবে উভয় কলই খুঁজে পেতে হবে এবং পরিবর্তন করতে হবে (এবং কোডের আরও জটিল অংশে দুটি রয়েছে এমনটি হতে পারে)।
আপনি এটি লিখতে পারেন:
public void doSomething(int input)
{
var complete = false;
while(!complete)
{
TransformInSomeWay(input);
complete = ProcessingComplete(input);
if(!complete)
{
DoSomethingElseTo(input);
}
}
}
... তবে আপনার এখন একটি পরিবর্তনশীল রয়েছে যার একমাত্র উদ্দেশ্য কন্ডিশন-চেকিং লুপ স্ট্রাকচারে স্থানান্তর করা এবং মূল যুক্তির মতো একই আচরণ প্রদানের জন্য একাধিকবার পরীক্ষাও করতে হবে।
আমার অংশ হিসাবে, আমি বলছি যে অ্যালগরিদমকে এই কোডটি বাস্তব বিশ্বে প্রয়োগ করে, মূল কোডটি সর্বাধিক পঠনযোগ্য। আপনি যদি নিজেরাই এটির মধ্য দিয়ে যাচ্ছিলেন তবে আপনি এটি সম্পর্কে ভাবতে চাইতেন এবং সুতরাং এটি অ্যালগরিদমের সাথে পরিচিত লোকদের কাছে স্বজ্ঞাত হতে পারে।
সুতরাং, কোনটি "ভাল"? লুপটির চারপাশে যুক্তি কাঠামোয় করে যখন লুপটিকে শর্ত পরীক্ষা করার দায়িত্ব দেওয়া ভাল? অথবা প্রয়োজনীয়তা বা অ্যালগরিদমের ধারণামূলক বিবরণ দ্বারা নির্দেশিত হিসাবে যুক্তিকে "প্রাকৃতিক" উপায়ে কাঠামোগত করা আরও ভাল, যদিও এটি লুপের অন্তর্নির্মিত ক্ষমতাগুলি বাইপাস করার অর্থ হতে পারে?
do ... until
কনস্ট্রাক্ট যেহেতু তারা করা হবে না এছাড়াও লুপ এই ধরনের জন্য দরকারী "primed।"