একটি লুপের অভ্যন্তরে, আমি কি সম্ভব হলে ব্রেক কন্ডিশনটিকে কন্ডিশন ফিল্ডে স্থানান্তর করব? [বন্ধ]


48

কখনও কখনও আমার এমন লুপগুলির প্রয়োজন হয় যার জন্য এই জাতীয় বিরতি দরকার:

for(int i=0;i<array.length;i++){
    //some other code
    if(condition){
        break;
    }
}

আমি লেখায় অস্বস্তি বোধ করি

if(condition){
    break;
}

কারণ এটি 3 লাইন কোড ব্যবহার করে। এবং আমি দেখতে পেয়েছি যে লুপটি আবার লিখিত হতে পারে:

                                   ↓
for(int i=0;i<array.length && !condition;i++){
    //some other code
}

সুতরাং আমার প্রশ্ন হ'ল, যদি সম্ভব হয় তবে কোডের লাইনগুলি হ্রাস করার জন্য শর্তকে ক্ষেত্রের দিকে নিয়ে যাওয়া কি অনুশীলন?


7
conditionবিশেষত যা হয় তার উপর নির্ভর করে ।
বার্গি

4
মিস্রা লুপগুলির মধ্যে "ব্রেক" এবং "চালিয়ে" ব্যবহার নিষিদ্ধ করার একটি কারণ রয়েছে। আরও দেখুন এই: stackoverflow.com/q/3922599/476681
BЈовић

35
আমি মনে করি লাইনের সংখ্যা নিজেই আসল ইস্যু নয়। এটি এক লাইনে লেখা যেতে পারে। যদি (শর্ত) বিরতি; আমার মতে ইস্যুটি পঠনযোগ্যতা। আমি ব্যক্তিগতভাবে লুপ শর্তটি ব্যবহার করা ছাড়া অন্য কোনও লুপ ভাঙা পছন্দ করি না।
জো

97
যেহেতু এটি 3 লাইন কোড এ গ্রাহ্য করে কোন স্টাইলকে অপছন্দ করার খুব, খুব, খুব খারাপ কারণ। IMO "গ্রাহক [আইং] কোডের লাইন" কোথাও অপ্রাসঙ্গিক এবং ভাল জিনিসের মধ্যে। অপ্রয়োজনীয় কোড এবং হার্ড-টু-সন্ধানের বাগের ফলে খুব অল্প লাইনগুলিতে খুব বেশি যুক্তিযুক্ত পদার্থের চেষ্টা করার চেষ্টা করা হচ্ছে।
অ্যান্ড্রু হেনেল

3
সম্ভবত অপ্রচলিত মতামত: for(int i=0;i<array.length && !condition;i++)তুলনামূলকভাবে অস্বাভাবিক এবং কেবল কোড স্কিমিং করে এমন কেউ এটিকে উপেক্ষা করতে পারেন; এই একটি একটি ভাল ব্যবহারের ক্ষেত্রে হতে পারে whileবা do whileলুপ, যা আরো প্রায়ই লুপ সংজ্ঞা একাধিক বিরতি শর্ত আছে।
জুলাই

উত্তর:


154

আপনি যে দুটি উদাহরণ দিয়েছেন তা কার্যত সমতুল্য নয়। মূলতে, কন্ডিশন পরীক্ষাটি "কিছু অন্যান্য কোড" বিভাগের পরে করা হয়, যেখানে পরিবর্তিত সংস্করণে লুপ বডিটির শুরুতে প্রথমে এটি করা হয়।

কোডটি কখনই লাইনের সংখ্যা হ্রাস করার একমাত্র উদ্দেশ্য নিয়ে পুনরায় লেখা উচিত নয়। স্পষ্টতই এটি দুর্দান্ত বোনাস হয় যখন এটি সেভাবে কার্যকর হয় তবে এটি পঠনযোগ্যতা বা সঠিকতার ব্যয়ে কখনই করা উচিত নয়।


5
আমি আপনার অনুভূতিটি বুঝতে পারি, তবে আমি যথেষ্ট উত্তরাধিকারের কোডটি বজায় রেখেছি যেখানে লুপটি কয়েকশ লাইনের লম্বা এবং একাধিক শর্তাধীন বিরতি রয়েছে। কোডটি শর্তযুক্ত বিরতিতে পৌঁছানোর প্রত্যাশা করলে ডিবাগিংটি খুব কঠিন হয়ে যায় তবে পূর্ব কোডটি প্রথমে শর্তযুক্ত বিরতি ব্যবহার করে। আপনি কীভাবে এই কোডটি পরিচালনা করবেন? উপরের মতো সংক্ষিপ্ত উদাহরণগুলিতে, এই ধরণের সমস্ত সাধারণ পরিস্থিতি সম্পর্কে ভুলে যাওয়া সহজ।
বেরিন লরিটস

84
@ বেরিনলরিটস: এর সাথে মোকাবিলা করার সঠিক উপায়টি হল কয়েকশ লাইনের দীর্ঘ লুপগুলি না!
ক্রিস

27
@ ওয়ালফ্র্যাট: যদি এটি পুনরায় লেখার কোনও বিকল্প না হয় তবে সত্যই আর কোনও প্রশ্ন আসবে না। এই বলে যে আপনি সাধারণত সুরক্ষিতভাবে "এক্সট্রাক্ট মেথড" টাইপ রিফ্যাক্টরটি কোডের ব্লকগুলি সরিয়ে নিতে ব্যবহার করতে পারেন যা আপনার মূল পদ্ধতির লুপটি আরও সংক্ষিপ্ত করে তুলবে এবং আশা করি যুক্তি প্রবাহটিকে আরও সুস্পষ্ট করে তুলবে। ব্যাপারটি আসলে এটি একটি কেস। আমি পদ্ধতিগুলি সংক্ষিপ্ত রাখার আমার সাধারণ নিয়মের পাশে দাঁড়াব এবং অবশ্যই নেেক্সটেড লুপ যুক্তি সংক্ষিপ্ত রাখব তবে আমি সাধারণ অর্থে এর চেয়ে বেশি কিছু বলার চেষ্টা করতে চাই না ...
ক্রিস

4
@ অ্যান্ড্রুহেনেল ব্রিভিটি হ'ল পাঠযোগ্যতা, অন্তত এই অর্থে যে ক্রমবর্ধমান বর্ধনশীলতা সর্বদা পঠনযোগ্যতা এবং রক্ষণাবেক্ষণযোগ্যতা হ্রাস করে। ঘনত্ব বাড়িয়ে এবং বিমূর্ততা স্তর বাড়িয়ে এলওসি হ্রাস করা হয় এবং এটি খুব দৃly়ভাবে এই সাইটের অন্যান্য প্রশ্ন / এ জুটিতে সত্যায়িত হিসাবে রক্ষণাবেক্ষণের সাথে সম্পর্কযুক্ত।
লুশেনকো

5
@ জো দো-ডু-কনস্ট্রাক্টটি এত বিরল যে এটি বিকাশকারীদের ভ্রমণের ঝুঁকির মধ্যে পরে সেই কোডটি বজায় রাখা দরকার। কয়েকটি দেব আসলে তাদের দেখেনি! আমি নিশ্চিত না যে কিছুক্ষণের ফলে পাঠযোগ্যতা আদৌ উন্নত হবে কিনা - যদি কিছু হয় তবে কোডটি বুঝতে অসুবিধা বাড়বে । যেমন একটি উদাহরণ - আমার বর্তমান কোডবেস প্রায় 15 বছরের পুরানো এবং প্রায় 2 মিলিয়ন এলওসি রয়েছে। প্রায় পঞ্চাশটি বিকাশকারী এটি ইতিমধ্যে স্পর্শ করেছেন। এটি হুবহু ডু-উইল লুপগুলি!
টি। সর - মনিকা পুনরায় ইনস্টল করুন

51

"এটি 3 লাইন কোড ব্যবহার করে" এবং এইভাবে খারাপ তা যুক্তিটি আমি কিনছি না। সর্বোপরি, আপনি কেবল এটি লিখতে পারেন:

if (condition) break;

এবং শুধু একটি লাইন গ্রাস।

যদি ifলুপের মধ্যভাগে প্রদর্শিত হয় তবে অবশ্যই এটির পৃথক পরীক্ষা হিসাবে উপস্থিত থাকতে হবে। তবে, যদি এই পরীক্ষাটি ব্লকের শেষে উপস্থিত হয়, আপনি একটি লুপ তৈরি করেছেন যা লুপের উভয় প্রান্তে একটি চলমান পরীক্ষা আছে, সম্ভবত কোডটির জটিলতা যুক্ত করে। যদিও সচেতন থাকুন, যে কখনও কখনও if (condition)পরীক্ষাটি ব্লকটি কার্যকর হওয়ার পরে কেবল তা বোধগম্য হতে পারে।

তবে ধরে নেওয়া অন্যান্য বিষয়গুলি অবলম্বন করে বিষয়টি তেমনটি নয়:

for(int i=0;i<array.length && !condition;i++){
    //some other code
}

প্রস্থান শর্তগুলি একসাথে রাখা হয়েছে, যা জিনিসগুলিকে সরল করতে পারে (বিশেষত যদি " কিছু অন্য কোড " দীর্ঘ হয়)।

অবশ্যই এখানে কোন সঠিক উত্তর নেই। সুতরাং ভাষার মূর্খতাগুলি সম্পর্কে আপনার সচেতন থাকুন, আপনার দলের কোডিং কনভেনশনগুলি কী etc. ইত্যাদি But তবে ভারসাম্য বজায় রেখে আমি একক পরীক্ষার পদ্ধতি অবলম্বন করব যখন এটি কার্যকরীভাবে বোঝায়।


14
@ jpmc26, আরও ভাল? বৈধ বিকল্প শৈলী? অবশ্যই.
ডেভিড আরনো

6
কোডটি পরে সম্পাদনা করা হলে এবং কোনও উল্লেখযোগ্য অসুবিধায় ভুগছেন না বলে গণ্ডগোল করা আরও ভাল।
jpmc26

4
"লুপ সামগ্রীগুলি দীর্ঘ হতে পারে" কারণ এগুলিকে একসাথে রাখা দুর্বল যুক্তি বলে মনে হয়। যখন আপনার সামগ্রীর জন্য পড়তে অসুবিধা হয় তখন দুটি লাইনের কোড সংরক্ষণ করা ছাড়াও আপনার অন্যান্য সমস্যা থাকে।
ব্লু উইজার্ড

12
@ jpmc26 অসমত। এই উত্তর অনুসারে সংক্ষিপ্ততম, ওয়ান-লাইনারের শর্তগুলির মধ্যে ধনুর্বন্ধকগুলি অতিমাত্রায় বিশৃঙ্খলা। ছাড়া চোখের আরও মার্জিত এবং সহজ। তারা একটি টেরিনারি শর্তসাপেক্ষ অপারেটরের মতো। আমি ব্রেসগুলি বড় স্টেটমেন্ট ব্লকগুলিতে ভেঙে যুক্ত করতে কখনও ভুলিনি; আমি ইতিমধ্যে সব পরে নতুন লাইন যুক্ত করছি।
benxyzzy

3
এটি সমস্ত শৈলীর পছন্দ, তবে যদি কেউ যুক্তিটি নিরাপদ করে তোলে তবে আমি এই যুক্তির সাথে একমত নই। আমি নিজেই ধনুর্বন্ধনী ছাড়া এবং পরবর্তী লাইনে পছন্দ করি তবে এর অর্থ এই নয় যে এটি অন্যান্য শৈলীর চেয়ে কম বা বেশি বৈধ
phflack

49

এই ধরণের প্রশ্নটি প্রায় যতদিন ধরে প্রোগ্রামিং চলছে ততক্ষণ বিতর্ক ছড়িয়ে দিয়েছে। আমার টুপিটি রিংয়ে ফেলতে, আমি breakশর্তটি নিয়ে সংস্করণে যাব এবং কেন (এই নির্দিষ্ট ক্ষেত্রে):

forলুপ লুপ iterating মান নির্দিষ্ট করার মাত্র নেই। এর মধ্যে ব্রেকিং শর্তটি কোডিং করা যুক্তি আইএমওকে কেবল ঘোলাটে করে।

আলাদা থাকার breakফলে এটি স্ফটিক স্পষ্ট হয়ে যায় যে স্বাভাবিক প্রক্রিয়াজাতকরণের সময়, মানগুলি forলুপে বর্ণিত থাকে এবং শর্তটি যেখানে আসে সেখানে বাদ দিয়ে প্রসেসিং চালিয়ে যাওয়া উচিত ।

কিছুটা ব্যাকগ্রাউন্ড হিসাবে, আমি এ কোডিং শুরু করেছিলাম break, তারপর শর্তটি forলুপের জন্য কয়েক বছর ধরে রাখি (একটি ব্যতিক্রমী প্রোগ্রামারের নির্দেশে) এবং তারপরে breakস্টাইলে ফিরে গেলাম কারণ এটি কেবলমাত্র ক্লিনার অনুভূত হয়েছিল (এবং এটি ছিল প্রচলিত শৈলীতে বিভিন্ন কোড টোম আমি গ্রাস করছিলাম)।

এটি দিনের শেষে সেই পবিত্র যুদ্ধগুলির মধ্যে অন্যটি - কেউ কেউ বলে যে আপনার কখনই কৃত্রিমভাবে লুপ থেকে বের হওয়া উচিত নয় , অন্যথায় এটি আসল লুপ নয়। আপনি যা পঠনযোগ্য মনে করেন তা করুন (নিজের এবং অন্য উভয়ের জন্য)। কীস্ট্রোক হ্রাস যদি সত্যিই আপনার জিনিস হয় তবে উইকএন্ডে কোড গল্ফ করুন - বিয়ার optionচ্ছিক।


3
যদি শর্তটির একটি ভাল নাম থাকে যেমন "পাওয়া" (যেমন আপনি কোনও কাজের জন্য অ্যারের মাধ্যমে সন্ধান করছেন), তবে এটি লুপটির মাথায় রেখে দেওয়া ভাল ধারণা is
user949300

1
আমাকে বলা হয়েছিল যে forপুনরাবৃত্তির সংখ্যাটি যখন পরিচিত হয় তখন লুপগুলি ব্যবহৃত হয় (উদাহরণস্বরূপ যখন কোনও ব্রেকিং শর্ত নেই তবে অ্যারে / তালিকার শেষে) এবং whileকখন হয় না। এটি whileলুপের ক্ষেত্রে বলে মনে হচ্ছে । পঠনযোগ্যতা যদি উদ্বেগ হয় idx+=1তবে লুপের ভিতরে থাকা কোনও if/elseব্লকের চেয়ে পড়ার পক্ষে আরও পরিষ্কার
লাইব

কোডটি অনুসরণ করে যদি আপনি কেবল লুপে ব্রেক কন্ডিশন রাখতে পারবেন না, তাই কমপক্ষে আপনাকে লিখতে হবে "যদি (শর্ত) - পাওয়া = সত্য; চালিয়ে যান;}
gnasher729

আমরা for(int i=0; i<something;i++)লুপগুলিতে এতটাই অভ্যস্ত হয়ে পড়েছি যে আমার অনুমান অর্ধেক বিকাশকারীরা সত্যই মনে forকরতে পারে না যে লুপগুলি আলাদাভাবে ব্যবহার করা যেতে পারে, এবং এইভাবে &&conditionঅংশটি বুঝতে খুব অসুবিধা হয় ।
রাল্ফ ক্লেবারহফ

পুনঃটুইট আমি অনেকগুলি নতুন বিকাশকারীকে অবাক করে দেখেছি যে ট্রিপার্ড বিবৃতি প্রকাশগুলি সমস্ত alচ্ছিক। আমি শেষবারের মতো দেখেছি for(;;)
রবি ডি

43

forলুপগুলি 1 টির উপরে পুনরাবৃত্তির জন্য হয় - এগুলি কেবলমাত্র লল-লেট-টান-কিছু-এলোমেলো স্টাফ-থেকে-বডি-এবং-তাদের-এ-লুপ-হেডারে রাখুন - তিনটি এক্সপ্রেশন খুব খুব নির্দিষ্ট অর্থ:

  • প্রথমটি হ'ল পুনরুদ্ধারকারীকে আরম্ভ করার জন্য । এটি কোনও সূচক, পয়েন্টার, একটি পুনরাবৃত্তি বস্তু বা যা কিছু হতে পারে - যতক্ষণ না এটি পুনরাবৃত্তির জন্য ব্যবহৃত হয় ।
  • দ্বিতীয়টি হল আমরা শেষ পর্যন্ত পৌঁছেছি কিনা তা যাচাইয়ের জন্য।
  • তৃতীয়টি পুনরাবৃত্তকারীকে অগ্রসর করার জন্য।

লুপের ভিতরে যুক্তি থেকে প্রতিটি পুনরাবৃত্তির হ্যান্ডলিং ( কীভাবে পুনরাবৃত্তি করা যায়) পৃথক করা ( প্রতিটি পুনরাবৃত্তিতে কী করতে হবে ) ধারণাটি । অনেক ভাষায় সাধারণত প্রতিটি জন্য লুপ থাকে যা আপনাকে পুনরাবৃত্তির বিশদ থেকে মুক্তি দেয়, তবে আপনার ভাষায় সেই রচনাটি না থাকলেও বা এটি আপনার দৃশ্যে ব্যবহার করা যায় না - আপনার এখনও লুপ শিরোনাম সীমাবদ্ধ করা উচিত পুনরাবৃত্তি হ্যান্ডলিং।

সুতরাং, আপনাকে নিজেকে জিজ্ঞাসা করতে হবে - আপনার পুনরাবৃত্তি পরিচালনা সম্পর্কে বা লুপের ভিতরে যুক্তি সম্পর্কে কি অবস্থা? সম্ভাবনাগুলি হ'ল এটি লুপের ভিতরে যুক্তি সম্পর্কে - তাই এটি হেডারের পরিবর্তে লুপের ভিতরে পরীক্ষা করা উচিত।

1 অন্যান্য লুপগুলির বিপরীতে, এটি কিছু হওয়ার জন্য "অপেক্ষা" করছে। একটি for/ foreachলুপ একটি উপর পুনরুক্তি করতে আইটেমের "তালিকা" ধারণা থাকা উচিত - এমনকি সেই তালিকাটি অলস বা অসীম অথবা অ্যাবস্ট্র্যাক্ট।


5
আমি যখন প্রশ্নটি পড়ি তখন এটি আমার প্রথম চিন্তা ছিল। হতাশ আমাকে কাউকে এটি দেখতে দেখতে আধ ডজন উত্তর দিয়ে স্ক্রোল করতে হয়েছিল
নিমো

4
উম্ম ... সমস্ত লুপগুলি পুনরাবৃত্তির জন্য - এটি "পুনরাবৃত্তি" শব্দের অর্থ :-)। আমি ধরে নিয়েছি আপনার অর্থ "সংগ্রহের মাধ্যমে পুনরাবৃত্তি", বা "পুনরাবৃত্তির সাহায্যে পুনরাবৃত্তি" এর মতো কিছু?
স্মৃতি 17

3
@psmears ঠিক আছে, সম্ভবত আমি ভুল শব্দটি বেছে নিয়েছি - ইংরেজি আমার মাতৃভাষা নয় এবং আমি যখন পুনরাবৃত্তির কথা ভাবি তখন আমি "কোনও কিছুর উপরে পুনরাবৃত্তি" মনে করি। আমি উত্তর ঠিক করব।
ইদান আরে

একটি মধ্যবর্তী ক্ষেত্রে হ'ল শর্তটি কিছুটা এমন someFunction(array[i])। এখন শর্তের উভয় অংশই সেই জিনিসটি সম্পর্কে যা আপনি পুনরাবৃত্তি করছেন এবং এটি &&লুপ শিরোনামের সাথে তাদের একত্রিত করার অর্থ হবে ।
বার্মার

আমি আপনার অবস্থান সম্মান, কিন্তু আমি একমত না। আমার মনে forহয় হার্টের লুপগুলি কাউন্টার, কোনও তালিকার উপরে নয়, এবং এটি forপূর্ববর্তী ভাষাগুলির সিনট্যাক্স দ্বারা সমর্থিত (এই ভাষাগুলিতে প্রায়শই একটি for i = 1 to 10 step 2বাক্য গঠন থাকে এবং stepকমান্ড - এমনকি প্রাথমিক মানকেও অনুমতি দেয় যা প্রথমটির সূচক নয়) উপাদান - একটি সংখ্যার প্রসঙ্গে ইঙ্গিত, কোনও তালিকা প্রসঙ্গে নয়)। শুধুমাত্র ব্যবহারের ক্ষেত্রে আমি মনে করি যে সমর্থন forশুধুমাত্র একটি তালিকা উপর iterating যেমন লুপ parallelising হয়, এবং যে স্পষ্ট সিনট্যাক্স করার জন্য যাহাই হউক না কেন এখন প্রয়োজন করছেন কোড, উদাহরণস্বরূপ, একটি সাজানোর ভাঙে না।
লোগান পিকআপ

8

আমি সংস্করণটি ব্যবহার করার পরামর্শ দিচ্ছি if (condition)। এটি ডিবাগ করা আরও পঠনযোগ্য এবং সহজ। কোডের 3 টি অতিরিক্ত লাইন লেখার ফলে আপনার আঙ্গুলগুলি ভাঙবে না, তবে পরবর্তী ব্যক্তিটির পক্ষে আপনার কোডটি বোঝা সহজ হবে।


1
কেবলমাত্র যদি (মতামত দেওয়া হয়েছে) লুপ ব্লকের শত শত লাইন কোড নেই এবং এর মধ্যে যুক্তি রকেট বিজ্ঞান নয়। আমি মনে করি আপনার যুক্তি ঠিক আছে, তবে naming thingsকী চলছে এবং ব্রেকিং শর্তটি কখন পূরণ হয় তা বুঝতে আমি সঠিকভাবে এমন কিছু মিস করি ।
লাইভ

2
@ লাইভ যদি লুপ ব্লকের মধ্যে কয়েকশ লাইনের কোড থাকে তবে ব্রেক ব্রেকটি শর্তটি কোথায় লিখতে হবে তার চেয়ে বড় সমস্যা।
আলেকসান্দার

এই কারণেই আমি উত্তরটি প্রাসঙ্গিক করার পরামর্শ দিয়েছিলাম, কারণ সবসময় সত্য হয় না।
লাইভ

8

আপনি যদি এমন কোনও সংগ্রহকে ঘুরিয়ে দিচ্ছেন যেখানে নির্দিষ্ট উপাদানগুলি এড়ানো উচিত, তবে আমি একটি নতুন বিকল্পের প্রস্তাব দিই:

  • পুনরাবৃত্তি করার আগে আপনার সংগ্রহটি ফিল্টার করুন

জাভা এবং সি # উভয়ই এটি তুলনামূলকভাবে তুচ্ছ করে তোলে। আমি অবাক হব না যদি সি ++ এর প্রয়োগ না ঘটে এমন নির্দিষ্ট উপাদানগুলি এড়িয়ে যাওয়ার জন্য অভিনব পুনরাবৃত্তি করার কোনও উপায় থাকে। তবে এটি কেবল সত্যই যদি আপনার পছন্দের ভাষা সমর্থন করে এবং আপনি যে কারণটি ব্যবহার করছেন breakতার কারণ হ'ল কারণ আপনি কোনও উপাদান প্রক্রিয়াজাত করছেন কিনা তা নিয়ে শর্ত রয়েছে।

অন্যথায় আপনার অবস্থাটিকে লুপের অংশ হিসাবে গড়ে তোলার খুব ভাল কারণ রয়েছে - এটি প্রাথমিক মূল্যায়ন সঠিক বলে ধরে নেওয়া।

  • এটি কখন লুপ শেষ হয় তা দেখতে আরও সহজ

আমি কোডে কাজ করেছি যেখানে আপনার জন্য লুপটি কয়েক শ লাইন নিয়েছে বেশ কয়েকটি শর্তযুক্ত এবং কিছু জটিল গণিত সেখানে চলছে। এটির সাথে আপনার যে সমস্যাগুলির মধ্যে আসে সেগুলি হ'ল:

  • break যুক্তিযুক্ত সমাধিগুলি খুঁজে পাওয়া শক্ত এবং কখনও কখনও অবাক হয়
  • ডিবাগিংয়ের জন্য লুপের প্রতিটি পুনরাবৃত্তির মধ্য দিয়ে পদক্ষেপ নেওয়া দরকার যা ঘটছে তা সত্যি বুঝতে
  • একটি পুনর্লিখনের পরে কার্যকরী সমতুল্যতার সাথে সহায়তা করার জন্য প্রচুর কোডে সহজেই পুনরায় পরিবর্তনযোগ্য রিফ্যাক্টেরিংগুলি পাওয়া যায় না বা ইউনিট পরীক্ষা থাকে না

সেই পরিস্থিতিতে আমি পছন্দ অনুসারে নিম্নলিখিত নির্দেশিকাগুলি সুপারিশ করি :

  • breakযদি সম্ভব হয় তবে প্রয়োজনীয়তা দূর করতে সংগ্রহটি ফিল্টার করুন
  • লুপের অবস্থার জন্য শর্তসাপেক্ষ অংশটি তৈরি করুন
  • breakযদি সম্ভব হয় তবে লুপের শীর্ষে অবস্থিত শর্তাবলী রাখুন
  • বিরতির দিকে দৃষ্টি আকর্ষণ করার জন্য একটি বহু-লাইন মন্তব্য যুক্ত করুন এবং কেন এটি রয়েছে

এই নির্দেশিকা সর্বদা আপনার কোডের নির্ভুলতার সাপেক্ষে । এমন বিকল্পটি চয়ন করুন যা অভিপ্রায়টিকে সর্বোত্তমভাবে উপস্থাপন করতে পারে এবং আপনার কোডের স্পষ্টতা উন্নত করতে পারে।


1
এই উত্তর বেশিরভাগই ঠিক আছে। তবে ... আমি দেখতে পাচ্ছি যে কোনও সংগ্রহকে ফিল্টার করা কীভাবে continueবিবৃতিগুলির প্রয়োজনীয়তা দূর করতে পারে তবে তারা কীভাবে বেশি সাহায্য করে তা আমি দেখতে পাই না break
user949300

1
@ user949300 একটি takeWhileফিল্টার breakবিবৃতিগুলি প্রতিস্থাপন করতে পারে । যদি কেউ থাকেন - উদাহরণস্বরূপ জাভা শুধুমাত্র Jave 9 (নয় এটাই তাদের পায় যে এটা নিজেকে বাস্তবায়ন হার্ড)
Idan Arye

1
তবে জাভাতে আপনি এখনও পুনরাবৃত্তির আগে ফিল্টার করতে পারেন। স্ট্রিম ব্যবহার করে (1.8 বা তারপরে) বা অ্যাপাচি সংগ্রহগুলি (1.7 বা তার আগের) ব্যবহার করে।
লাইভ

@ ইডানআরি - এমন অ্যাড-অন লাইব্রেরি রয়েছে যা জাভা স্ট্রিমস এপিআই-তে এই জাতীয় সুবিধা যুক্ত করে (যেমন জেও-ল্যাম্বদা )
জুলাই

আপনার মন্তব্য করার আগে @ ইডানআরিকে কখনই কোনও গ্রহণের কথা শুনেনি। অর্ডারিংয়ের সাথে ফিল্টারটি স্পষ্টভাবে সংযুক্ত করা আমাকে অস্বাভাবিক এবং হ্যাকি হিসাবে আঘাত করে, যেহেতু একটি "সাধারণ" ফিল্টারটিতে প্রতিটি উপাদান সত্য বা মিথ্যা ফিরে পেতে পারে, তার আগে বা পরে যা আসে তার থেকে আলাদা। এইভাবে আপনি জিনিসগুলিকে সমান্তরালভাবে চালাতে পারেন।
user949300

8

আপনি অন্যথায় না করে উল্লেখযোগ্য উপকার না পেলে কমপক্ষে অবাক হওয়ার উপায় অবলম্বন করার জন্য আমি দৃ strongly়ভাবে পরামর্শ দিচ্ছি ।

শব্দ পড়ার সময় লোকেরা প্রতিটি অক্ষর পড়ে না এবং বই পড়ার সময় তারা প্রতিটি শব্দই পড়ে না - যদি তারা পড়তে পারদর্শী হয় তবে তারা শব্দ এবং বাক্যগুলির রূপরেখার দিকে নজর দেয় এবং তাদের মস্তিষ্ককে বাকী অংশটি পূরণ করতে দেয় ।

তাই সম্ভাবনাগুলি মাঝেমধ্যে বিকাশকারী এটি ধরে রাখবেন যে এটি লুপের জন্য কেবল একটি মান মাত্র এবং এটির দিকে তাকাতেও নয়:

for(int i=0;i<array.length&&!condition;i++)

আপনি নির্বিশেষে যে শৈলী ব্যবহার করতে চান তাহলে, আমি অংশের পরিবর্তন সুপারিশ for(int i=0;i<এবং ;i++)যে এই লুপ একটি আদর্শ যে পাঠকের মস্তিষ্কের বলুন।


সঙ্গে যেতে আরেকটি কারণ if- breakযে আপনি সবসময় সঙ্গে আপনার পদ্ধতির ব্যবহার করতে পারবেন না হয় for-condition। আপনাকে ব্যবহার করতে হবে if- breakযখন বিরতির অবস্থাটি কোনও forবিবৃতিতে লুকিয়ে রাখা খুব জটিল হয় বা forলুপের ভিতরে কেবল অ্যাক্সেসযোগ্য ভেরিয়েবলগুলির উপর নির্ভর করে ।

for(int i=0;i<array.length&&!((someWidth.X==17 && y < someWidth.x/2) || (y == someWidth.x/2 && someWidth.x == 18);i++)

সুতরাং আপনি যদি তার সাথে যাওয়ার সিদ্ধান্ত নেন if- break, আপনি আচ্ছাদিত। তবে আপনি যদি forশর্তগুলির সাথে যাওয়ার সিদ্ধান্ত নেন তবে আপনাকে if- breakএবং- forশর্তগুলির মিশ্রণটি ব্যবহার করতে হবে । সামঞ্জস্য বজায় রাখার জন্য, আপনাকে শর্তগুলিfor -শর্ত এবং if- breakযখনই শর্ত পরিবর্তন হয় এর মধ্যে পিছনের দিকে এগিয়ে যেতে হবে।


4

আপনার রূপান্তরটি ধরে নেওয়া হচ্ছে যে আপনি লুপটি প্রবেশ conditionকরার সাথে যা কিছু যাচাই করে তা মূল্যায়ন করে true। আমরা এই উদাহরণে এর যথার্থতার বিষয়ে মন্তব্য করতে পারি না কারণ এটি সংজ্ঞায়িত হয়নি।

এখানে "কোডের রেখাগুলি হ্রাস" করতে সাফল্য পেয়ে আপনি তারপরে সন্ধান করতে পারেন

for(int i=0;i<array.length;i++){
    // some other code
    if(condition){
        break;
    }
    // further code
}

এবং পৌঁছে একই রূপান্তর প্রয়োগ করুন

for(int i=0;i<array.length && !condition;i++){
    // some other code
    // further code
}

যা একটি অবৈধ রূপান্তর, আপনি এখন নিঃশর্তভাবে further codeযেখানে আপনি আগে করেননি সেখানে করুন।

একটি আরও নিরাপদ রূপান্তর প্রকল্পটি পৃথক ফাংশনে নিষ্কাশন করা some other codeএবং মূল্যায়ন conditionকরা

bool evaluate_condition(int i) // This is an horrible name, but I have no context to improve it
{
     // some other code
     return condition;
}

for(int i=0;i<array.length && !evaluate_condition(i);i++){
    // further code
}

4

টিএল; ডিআর আপনার নির্দিষ্ট পরিস্থিতিতে যা ভাল পড়বে তা করুন

এই উদাহরণটি নেওয়া যাক:

for ( int i = 1; i < array.length; i++ ) 
{
    if(something) break;
    // perform operations
}

এই ক্ষেত্রে আমরা লুপের কোডের কোনওটিই চাই না যদি somethingসত্য হয় তবে তা কার্যকর করা যায় , সুতরাং somethingশর্ত ক্ষেত্রের মধ্যে পরীক্ষাটি সরানো যুক্তিযুক্ত।

for ( int i = 1; i < array.length && !something; i++ )

তারপরে আবার লুপের সামনে somethingসেট করা যায় কিনা তার উপর নির্ভর করে তবে এর trueমধ্যে নয়, এটি আরও স্পষ্টতা দিতে পারে:

if(!something)
{
    for ( int i = 1; i < array.length; i++ )
    {...}
}

এখন এটি কল্পনা করুন:

for ( int i = 1; i < array.length; i++ ) 
{
    // perform operations
    if(something) break;
    // perform more operations
}

আমরা সেখানে একটি খুব স্পষ্ট বার্তা প্রেরণ করছি। somethingঅ্যারে প্রসেস করার সময় যদি সত্য হয়ে যায় তবে এই মুহুর্তে পুরো অপারেশনটি ত্যাগ করুন। শর্ত ক্ষেত্রের মধ্যে চেকটি সরানোর জন্য আপনাকে যা করতে হবে:

for ( int i = 1; i < array.length && !something; i++ ) 
{
    // perform operations
    if(!something)
    {
        // perform more operations
    }
}

যুক্তিযুক্তভাবে, "বার্তা" জঞ্জাল হয়ে গেছে এবং আমরা ব্যর্থতার শর্তটি দুটি জায়গায় যাচাই করে দেখছি - যদি ব্যর্থতার শর্ত পরিবর্তন হয় এবং আমরা সেই জায়গাগুলির মধ্যে একটি ভুলে যাই তবে কী হবে?

লুপ এবং কন্ডিশনের জন্য অবশ্যই আরও অনেকগুলি বিভিন্ন আকার রয়েছে, সবই তাদের নিজের ঘনক্ষেত্র সহ।

কোডটি লিখুন যাতে এটি ভালভাবে পড়ে (এটি স্পষ্টত কিছুটা বিষয়গত) এবং সংক্ষিপ্তভাবে। কোডিং নির্দেশিকাগুলির একটি কঠোর সেটের বাইরে সমস্ত "বিধি" ব্যতিক্রম রয়েছে। আপনি যে সিদ্ধান্তটি সেরা সিদ্ধান্তটি প্রকাশ করেছেন তা লিখুন এবং ভবিষ্যতের ভুলের সম্ভাবনাগুলি হ্রাস করুন।


2

এটি আকর্ষণীয় হতে পারে কারণ আপনি লুপ শিরোনামের সমস্ত শর্তাদি দেখেন এবং breakবৃহত ব্লকের ভিতরে বিভ্রান্ত হতে পারেন, একটি forলুপ এমন একটি প্যাটার্ন যেখানে বেশিরভাগ প্রোগ্রামাররা কিছু পরিসরে লুপিং আশা করে।

বিশেষত যেহেতু আপনি এটি করেন, একটি অতিরিক্ত বিরতির শর্ত যুক্ত বিভ্রান্তির কারণ হতে পারে এবং এটি কার্যকরীভাবে সমতুল্য কিনা তা দেখা শক্ত

প্রায়শই একটি ভাল বিকল্প ব্যবহার করতে হয় whileবা do {} whileলুপ যা চেক উভয় শর্ত, আপনার অ্যারের অভিমানী অন্তত একটি উপাদান আছে।

int i=0
do {
    // some other code
    i++; 
} while(i < array.length && condition);

একটি লুপ ব্যবহার করা যা কেবলমাত্র শর্ত পরীক্ষা করছে এবং লুপ শিরোনামের কোডটি চালাচ্ছে না আপনি যখন শর্তটি পরীক্ষা করা হয় তখন খুব স্পষ্ট করে দেন এবং আসল অবস্থাটি কী এবং পার্শ্ব প্রতিক্রিয়াগুলির সাথে কোড কী।


এই প্রশ্নের ইতিমধ্যে কিছু ভাল উত্তর থাকা সত্ত্বেও, আমি এটি বিশেষভাবে উত্সাহিত করতে চেয়েছিলাম কারণ এটি একটি গুরুত্বপূর্ণ বিষয়: আমার কাছে, ফর-লুপে (সরল বাউন্ড চেকিং) ব্যতীত অন্য কিছু থাকার কারণে for(...; i <= n; ...)কোডটি পড়তে পারা যায় কারণ আমার কাছে রয়েছে এখানে থেমে থেমে থেমে থেমে থেমে ভাবতে হবে এবং প্রথম পাসে শর্তটি পুরোপুরি মিস করতে পারে কারণ আমি সেখানে আসার আশা করি না। আমার জন্য, একটি forলুপটি বোঝায় যে আপনি কিছু পরিসরের উপরে লুপ করছেন, যদি কোনও বিশেষ প্রস্থান শর্ত থাকে তবে এটি একটি দিয়ে স্পষ্ট করা উচিত if, বা আপনি একটি ব্যবহার করতে পারেন while
CompuChip

1

এটি খারাপ, যেহেতু কোডটি মানুষের দ্বারা পড়া বোঝানো হয় - নন-ইডিয়োম্যাটিক forলুপগুলি প্রায়শই পড়তে বিভ্রান্ত হয়, যার অর্থ বাগগুলি এখানে লুকিয়ে থাকার সম্ভাবনা বেশি থাকে তবে মূল কোডটি উভয় রেখেই উন্নত করা সম্ভব হয়েছিল সংক্ষিপ্ত এবং পাঠযোগ্য।

আপনি যা চান তা যদি কোনও অ্যারেতে একটি মান সন্ধান করতে হয় (প্রদত্ত কোডের নমুনা কিছুটা জেনেরিক তবে এটি এই প্যাটার্নটিও হতে পারে), আপনি কেবল সেই উদ্দেশ্যে বিশেষত কোনও প্রোগ্রামিং ভাষার সরবরাহিত কোনও ফাংশন ব্যবহার করার চেষ্টা করতে পারেন। উদাহরণস্বরূপ (সিউডো-কোড, যেমন একটি প্রোগ্রামিং ভাষা নির্দিষ্ট করা হয়নি, সমাধানগুলি কোনও নির্দিষ্ট ভাষার উপর নির্ভর করে পরিবর্তিত হয়)।

array.find(item -> item.valid)

আপনার কোডটি সুনির্দিষ্টভাবে আপনার প্রয়োজন অনুযায়ী যা বলা হয়েছে এটি সমাধান করার সময় সমাধানটি লক্ষণীয়ভাবে সংক্ষিপ্ত করা উচিত।


1

আমার মতে কয়েকটি কারণ যা বলে যে, আপনার উচিত হবে না।

  1. এটি পাঠযোগ্যতা হ্রাস করে।
  2. আউটপুট এক নাও হতে পারে। তবে কিছু কোড প্রয়োগের পরে শর্তটি পরীক্ষা করা হওয়ায় এটি একটি do...whileলুপ (নয় while) দিয়ে সম্পন্ন করা যেতে পারে ।

তবে তার উপরে, এটি বিবেচনা করুন,

for(int i=0;i<array.length;i++){

    // Some other code
    if(condition1){
        break;
    }

    // Some more code
    if(condition1){
        break;
    }

    // Some even more code
}

এখন, আপনি কি এই অবস্থার সাথে এই শর্তগুলি যুক্ত করে সত্যই অর্জন করতে পারবেন for?


" ওপেনিয়ন " কী? আপনি কি " মতামত " বলতে চান ?
পিটার মর্টেনসেন

"প্রকাশের কয়েকটি কারণ যা বলে যে আপনার উচিত নয়" বলতে কী বোঝায় ? তুমি কি বিস্তারিত বলতে পারো?
পিটার মর্টেনসেন

0

আমি মনে করি breakএটিকে অপসারণ করা ভাল ধারণা হতে পারে তবে কোডের লাইনগুলি সংরক্ষণ করা নয়।

এটি ছাড়াই লেখার সুবিধাটি breakহ'ল লুপের পোস্ট-শর্তটি সুস্পষ্ট এবং স্পষ্ট। আপনি যখন লুপটি শেষ করেন এবং প্রোগ্রামটির পরবর্তী লাইনটি কার্যকর করেন, আপনার লুপের অবস্থাটি i < array.length && !conditionঅবশ্যই মিথ্যা ছিল। অতএব, হয় হয় iআপনার অ্যারের দৈর্ঘ্যের চেয়ে বড় বা সমান, বা conditionসত্য।

সংস্করণে break, একটি গোপন গোচা আছে। লুপের শর্তটি বলে যে প্রতিটি বৈধ অ্যারে সূচকের জন্য আপনি যখন অন্য কোনও কোড চালান তখন লুপটি সমাপ্ত হয় তবে বাস্তবে এমন একটি breakবিবৃতি পাওয়া যায় যা এর আগে লুপটি বন্ধ করতে পারে এবং আপনি লুপ কোডটি পর্যালোচনা না করলে আপনি এটি দেখতে পাবেন না খুব সতর্কভাবে. এবং সংযোজনকারীদের অনুকূলকরণ সহ স্বয়ংক্রিয় স্থিতিশীল বিশ্লেষকদের লুপের পরবর্তী অবস্থাগুলি কী কী তা হ্রাস করতে সমস্যা হতে পারে।

এটিই মূল কারণ ছিল এডগার ডিজকસ્ત્રা "গোটো বিবেচিত ক্ষতিকারক।" এটি কোনও স্টাইলের বিষয় ছিল না: লুপটি ভেঙে প্রোগ্রামটির অবস্থা সম্পর্কে আনুষ্ঠানিকভাবে तर्क করা শক্ত করে তোলে। আমি break;আমার জীবনে প্রচুর বক্তব্য লিখেছি এবং প্রাপ্ত বয়স্ক হওয়ার পরেও আমি একটি লিখেছিলাম goto(একটি পারফরম্যান্স-সমালোচনামূলক অভ্যন্তরীণ লুপের একাধিক স্তর থেকে বেরিয়ে এসে অনুসন্ধানের গাছের অন্য একটি শাখা দিয়ে চালিয়ে যেতে)। যাইহোক, আমি অনেক বেশী একটি শর্তাধীন লিখতে সম্ভবত am returnএকটি লুপ থেকে বিবৃতি (যা কখনো লুপ পর কোড রান এবং সেইজন্য তার পোস্ট অবস্থার বক্সহ করা যাবে না) তুলনায় break

পুনশ্চ

প্রকৃতপক্ষে, একই আচরণটি দেওয়ার জন্য কোডটি রিফ্যাকচারিং করতে আসলে কোডের আরও লাইন প্রয়োজন হতে পারে। আপনার রিফ্যাক্টরিং নির্দিষ্ট অন্য কোনও কোডের জন্য বৈধ হতে পারে বা যদি আমরা প্রমাণ করতে পারি যে এটি conditionমিথ্যা শুরু হবে। তবে আপনার উদাহরণটি সাধারণ ক্ষেত্রে এর সমান:

if ( array.length > 0 ) {
  // Some other code.
}
for ( int i = 1; i < array.length && !condition; i++ ) {
  // Some other code.
}

যদি অন্য কোনও কোড যদি ওয়ান-লাইনার না হয় তবে আপনি এটি আবার কোনও ফাংশনে সরিয়ে নিতে পারেন যাতে নিজেকে পুনরাবৃত্তি না করে এবং তারপরে আপনি নিজের লুপটি প্রায় একটি পুনরাবৃত্ত ফাংশনে রূপান্তরিত করেছেন।

আমি জানি যে এটি আপনার প্রশ্নের মূল বিষয় ছিল না, এবং আপনি এটিকে সাধারণ রাখছিলেন।


সমস্যাটি এই নয় যে বিরতি কোড সম্পর্কে বিতর্ক করা শক্ত করে তোলে, সমস্যাটি এলোমেলো জায়গায় বিরতি কোডকে জটিল জিনিসগুলিতে পরিণত করে। যদি এটি আসলে প্রয়োজন হয়, তবে বিরতির কারণে তর্ক করা খুব কঠিন নয়, তবে কোড জটিল জিনিসগুলি করা দরকার বলে।
gnasher729

এখানে কেন আমি একমত নই: আপনি যদি জানেন যে কোনও breakবিবৃতি নেই, তবে আপনি জানেন যে লুপের অবস্থা কী এবং লুপটি যখন বন্ধ হয় তখন শর্তটি মিথ্যা হয়। যদি একটি আছে break? তারপরে লুপটি শেষ হতে পারে এমন একাধিক উপায় রয়েছে এবং সাধারণ ক্ষেত্রে, যখন তাদের কোনওটি লুপটি থামিয়ে দিতে পারে তখন তা আক্ষরিকভাবে হ্যালটিং সমস্যার সমাধান করছে fig অনুশীলনে, আমার আরও বড় উদ্বেগ হ'ল লুপটি দেখে মনে হয় এটি একটি কাজ করে তবে বাস্তবে, যে কেউ লুপের পরে কোডটি লিখেছিল সেটিকে তার জটিল যুক্তিতে কবর দেওয়া একটি এজ কেস উপেক্ষা করেছে। লুপ অবস্থায় স্টাফ মিস করা কঠিন।
ডেভিস্লোর

0

হ্যাঁ, তবে আপনার বাক্য গঠনটি প্রচলিত এবং তাই খারাপ (টিএম)

আশা করি আপনার ভাষা এমন কিছু সমর্থন করে

while(condition) //condition being a condition which if true you want to continue looping
{
    do thing; //your conditionally executed code goes here
    i++; //you can use a counter if you want to reference array items in order of index
}

2
'শর্ত' এর জন্য আমার অন্য শব্দটি ব্যবহার করা উচিত ছিল, উদাহরণস্বরূপ হুবহু একই শর্তটি বোঝানোর জন্য আমি এটি আক্ষরিকভাবে বোঝাতে চাইনি
ইওয়ান

1
লুপের জন্য কেবল দূরবর্তী অবস্থান থেকেও প্রচলিত নয়, একেবারে কোনও কারণ নেই কারণ এই ফর্মটির লুপটি লুপের জন্য সমপরিমাণের চেয়ে ভাল। আসলে বেশিরভাগ লোকেরা বলবেন এটি আরও খারাপ, যেমন সিপিপির মূল গাইডলাইনগুলির
সান বার্টন

2
কিছু লোক সৃজনশীল বিকল্পকে ঘৃণা করে। বা কোনও সমস্যাটিকে তাদের মাথার মধ্যে থাকা সেটগুলির চেয়ে আলাদাভাবে দেখছেন। বা আরও সাধারণভাবে স্মার্ট গাধাগুলি। আমি তোমার ব্যথা অনুভব করছি!
মার্টিন মাট

1
@ সিয়ান দুঃখিত, আমি জানি যে লোকেরা তাদের ভুল বলে বলা ঘৃণা করে তবে আমি আপনাকে es.77 এ উল্লেখ করি
ইওয়ান

2
এটি whileকোডটিতে দানবকে জোর দেয় - ব্যতিক্রমটি অন্যথায় রুটিন / জাগতিক কোডে লুকানো থাকে। ব্যবসায়ের যুক্তিটি সামনে এবং কেন্দ্র, লুপিং মেকানিক্স সাবমিট। এটি forলুপ বিকল্পের জন্য "এক মিনিট অপেক্ষা করুন ..." প্রতিক্রিয়া এড়িয়ে চলে । এই উত্তরটি সমস্যার সমাধান করে। একেবারে ভোট।
রাডারবাব

0

যদি আপনি অত্যধিক জটিল forবিবৃতিটি পড়তে অসুবিধা সম্পর্কে উদ্বিগ্ন হন তবে এটি অবশ্যই একটি বৈধ উদ্বেগ। উল্লম্ব স্থান নষ্ট করাও একটি সমস্যা (যদিও কম সমালোচনামূলক হলেও)।

(ব্যক্তিগতভাবে আমি এই নিয়মটি অপছন্দ করি যে ifবিবৃতিগুলিতে সর্বদা ব্রেস থাকা আবশ্যক, এটি মূলত এখানে নষ্ট উল্লম্ব স্থানের কারণ Note মনে রাখবেন যে সমস্যাটি উল্লম্ব স্থানটি নষ্ট করছে ful অর্থপূর্ণ লাইনের সাথে উল্লম্ব স্থান ব্যবহার করা কোনও সমস্যা হওয়া উচিত নয়))

একটি বিকল্প হ'ল এটি একাধিক লাইনে বিভক্ত করা। আপনি যদি forএকাধিক ভেরিয়েবল এবং শর্তাদি সহ খুব জটিল বিবৃতি ব্যবহার করেন তবে অবশ্যই এটি করা উচিত । (এটি আমার পক্ষে উল্লম্ব স্থানের আরও ভাল ব্যবহার, যতটা সম্ভব লাইনকে অর্থবহ কিছু দেওয়া।

for (
   int i = 0, j = 0;
   i < array.length && !condition;
   i++, j++
) {
   // stuff
}

আরও বেশি ঘোষিত এবং কম অপরিহার্য ফর্মটি ব্যবহার করার চেষ্টা করা আরও ভাল পদ্ধতির হতে পারে। ভাষার উপর নির্ভর করে এটি পৃথক হবে, বা এই ধরণের জিনিস সক্ষম করতে আপনার নিজের ফাংশনগুলি লেখার প্রয়োজন হতে পারে। এটি conditionআসলে কী তা নির্ভর করে । অ্যারেতে রয়েছে তার উপর নির্ভর করে এটি অবশ্যই কোনওরকম পরিবর্তন করতে সক্ষম হবে।

array
.takeWhile(condition)  // condition can be item => bool or (item, index) => bool
.forEach(doSomething); // doSomething can be item => void or (item, index) => void

কোনও জটিল বা অস্বাভাবিক forবক্তব্যকে একাধিক লাইনে বিভক্ত করা এই পুরো আলোচনার সেরা ধারণা
user949300

0

একটি জিনিস যা ভুলে গিয়েছিল: যখন আমি একটি লুপ থেকে বিরতি পাই (সমস্ত সম্ভাব্য পুনরাবৃত্তিগুলি না করুক, তা যেভাবেই প্রয়োগ করা হোক না কেন), এটি সাধারণত এমন হয় যে আমি কেবল লুপটি থেকে বেরিয়ে আসতে চাই না, আমি এটিও জানতে চাইব কেন এটি ঘটেছে । উদাহরণস্বরূপ, আমি যদি কোনও আইটেম এক্স সন্ধান করি তবে আমি কেবল লুপ থেকে বিচ্ছেদ করি না, আমি এটিও জানতে চাই যে এক্সটি পাওয়া গেছে এবং এটি কোথায়।

সেই পরিস্থিতিতে লুপের বাইরে শর্ত থাকা খুব স্বাভাবিক। তাই আমি দিয়ে শুরু

bool found = false;
size_t foundIndex;

এবং লুপ আমি লিখতে হবে

if (condition) {
    found = true;
    foundIndex = i;
    break;
}

লুপ জন্য

for (i = 0; i < something && ! found; ++i)

এখন লুপে কন্ডিশন পরীক্ষা করা বেশ স্বাভাবিক is "ব্রেক" বিবৃতি রয়েছে কিনা তা নির্ভর করে আপনি যে লুপটি এড়াতে চান তাতে আরও প্রক্রিয়া চলছে কিনা on যদি কিছু প্রসেসিং প্রয়োজন হয় এবং অন্যান্য প্রসেসিং না হয় তবে আপনার মতো কিছু থাকতে পারে

if (! found) { ... }

আপনার লুপ কোথাও

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.