সি # লুপ - বিরতি বনাম চালিয়ে যান


797

একটি সি # (অন্যান্য ভাষায় জবাব দিতে নির্দ্বিধায়) লুপে, লুপের কাঠামো ছেড়ে যাওয়ার উপায় হিসাবে বিরতি এবং অবিরত করার মধ্যে কী পার্থক্য রয়েছে এবং পরবর্তী পুনরাবৃত্তিতে যেতে চান?

উদাহরণ:

foreach (DataRow row in myTable.Rows)
{
    if (someConditionEvalsToTrue)
    {
        break; //what's the difference between this and continue ?
        //continue;
    }
}


8
continue;বর্তমানের প্রক্রিয়াজাতকরণ বন্ধ করবে rowএবং সংগ্রহ থেকে পরবর্তীটির সাথে চালিয়ে যাবে row। অন্যদিকে, বিবৃতিটি পুরোপুরি break;ছেড়ে দেবে foreachএবং অবশিষ্ট সারিগুলি কখনই প্রক্রিয়া করা হবে না।
জেপ্পে স্টিগ

উত্তর:


1499

breakলুপটি সম্পূর্ণভাবে প্রস্থান continueকরবে, কেবল বর্তমান পুনরাবৃত্তিটি এড়িয়ে যাবে।

উদাহরণ স্বরূপ:

for (int i = 0; i < 10; i++) {
    if (i == 0) {
        break;
    }

    DoSomeThingWith(i);
}

বিরতি প্রথম পুনরাবৃত্তির উপর লুপটি প্রস্থান DoSomeThingWithকরবে - কখনই কার্যকর করা হবে না। এই এখানে:

for (int i = 0; i < 10; i++) {
    if(i == 0) {
        continue;
    }

    DoSomeThingWith(i);
}

এর DoSomeThingWithজন্য কার্যকর করা হবে না i = 0, তবে লুপটি চালিয়ে যাবে এবং এর DoSomeThingWithজন্য কার্যকর করা i = 1হবে i = 9


2
কেন তাদের চারপাশে কোনও ধনুর্বন্ধক চলতে থাকে না - আমি জানি যে এটি তাদের ছাড়া কাজ করে, তবে কেন?
জর্জ উইলকক্স

52
@ জর্জিউইলকক্স আমার বয়সের, আরও বোকা আত্মারা ব্রেস ব্যবহারের মূল্যটি সর্বদা শিখেনি। (একক বিবৃতি দেওয়ার জন্য এগুলি সি # তে areচ্ছিক, তবে এগুলি না দেওয়ার ফলে পরে একটি বাগ প্রবর্তন করা আরও সহজ হয় Also এছাড়াও প্রোগ্রামার্স.স্ট্যাকেক্সেঞ্জঞ্জ .
com/

386

এটি বোঝার একটি খুব সহজ উপায় হ'ল প্রতিটি কীওয়ার্ডের পরে "লুপ" শব্দটি স্থাপন করা। এগুলি এখন প্রতিদিনের বাক্যাংশগুলির মতো পড়লে এখন পদগুলি বোধগম্য হয়।

break লুপ - লুপ ভাঙা এবং বন্ধ হয়ে যায়।

continue লুপ - লুপ পরবর্তী পুনরাবৃত্তির সাথে চালানো চালিয়ে যায়।


105

বিরতি প্রোগ্রামের কাউন্টারটিকে অন্তঃস্থলীয় লুপের আওতা থেকে বাইরে চলে যায় causes

for(i = 0; i < 10; i++)
{
    if(i == 2)
        break;
}

এই মত কাজ করে

for(i = 0; i < 10; i++)
{
    if(i == 2)
        goto BREAK;
}
BREAK:;

লুপের শেষে জাম্প চালিয়ে যান। লুপের জন্য, বর্ধিত অভিব্যক্তিটিতে ঝাঁপ দাও।

for(i = 0; i < 10; i++)
{
    if(i == 2)
        continue;

    printf("%d", i);
}

এই মত কাজ করে

for(i = 0; i < 10; i++)
{
    if(i == 2)
        goto CONTINUE;

    printf("%d", i);

    CONTINUE:;
}

2
আমি লক্ষ্য করেছি যে এখানে অনেকগুলি লুপগুলি কেবলমাত্র স্ট্যান্ডার্ড forলুপ ব্যবহার করে তবে এটি কি পূর্ব এবং পোস্ট পরীক্ষিত whileলুপগুলির জন্য কাজ করবে ? gotoস্বরলিপি বিশালাকার আমাকে বিশ্বাস করি, কিন্তু কিছু যাচাইকরণ প্রয়োজন।
ড্যানিয়েল পার্ক

1
@ ড্যানিয়েল, WHILE লুপের জন্য আপনি ব্যবহার করতে পারেন BREAK এবং চালিয়ে যান, কোনও সমস্যা নেই।
আমিলা

@ ড্যানিয়েলপার্ক উভয় while("প্রাক-পরীক্ষিত") এবং do- while("" পোস্ট-টেস্ট ") এর পরে, একটি continue;বিবৃতি পরবর্তী বিষয়ের সাথে দেখা হওয়ার পরে যা ঘটবে তা হ'ল অতিরিক্ত পুনরাবৃত্তি করা হবে কিনা তা নির্ধারণের জন্য লুপের শর্তটি মূল্যায়ন করা হয়। অবশ্যই, break;লুপের শর্তটি যাচাই করা হয় না , লুপটি কেবল সম্পূর্ণভাবে বের হয়। সুতরাং gotoএই দিকটি বোঝার জন্য উপমাটি ভাল।
জেপ্প স্টিগ

37

আমার বিরতি ব্যবহার করা উচিত, না চালিয়ে যাওয়া উচিত কিনা তা নিয়ে আমি সর্বদা বিভ্রান্ত হয়ে পড়ি। এটি আমাকে স্মরণে রাখতে সহায়তা করে:

বিরতি বনাম ব্যবহার কখন করবেন?

  1. বিরতি - এটা ব্রেক আপ মত। দুঃখের বিষয়, তোমরা ছেলেরা অংশ নিচ্ছে। লুপটি বেরিয়ে গেছে।

বিরতি

  1. চালিয়ে যান - এর অর্থ হ'ল আপনি আজকে একটি বিশ্রাম দিন এবং আগামীকাল এটিকে সমস্ত সাজান (অর্থাত্ বর্তমান পুনরাবৃত্তিটি এড়িয়ে যান)!

চালিয়ে


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

বন্যার মধ্যে আবার একই পুরানো ট্রিপটি আবার ফিরে এসেছিল তাই আমি একটি বড় ভুল করেছি এটি একবার আমার পথে দেখার চেষ্টা করুন
তালাল জাহিদ

@ তালালজাহিদ আমি বুঝতে পারি না?
বিকেএসপুরজন

28

breakforeachলুপটি পুরোপুরি বন্ধ করে continueদেবে, পরের দিকে যেতে হবে DataRow


20

এমন কিছু লোক রয়েছে যারা পছন্দ করে না breakএবং পছন্দ করে না continue। তাদের সম্পর্কে সর্বশেষ অভিযোগটি আমি জাভাস্ক্রিপ্টে পেয়েছি : ডগলাস ক্রকফোর্ডের গুড পার্টস । তবে আমি দেখতে পেলাম যে কখনও কখনও এর মধ্যে একটি ব্যবহার করা জিনিসগুলি সহজসাধ্য করে তোলে, বিশেষত যদি আপনার ভাষায় লুপের স্টাইল do-whileবা do-untilস্টাইল অন্তর্ভুক্ত না থাকে ।

আমি breakলুপগুলিতে ব্যবহার করি যা কোনও কিছুর জন্য একটি তালিকা অনুসন্ধান করে। একবার খুঁজে পাওয়া গেলে, চালিয়ে যাওয়ার কোনও লাভ নেই, সুতরাং আপনি পাশাপাশি প্রস্থান করতে পারেন।

আমি continueতালিকার বেশিরভাগ উপাদানগুলির সাথে কিছু করার সময় ব্যবহার করি তবে এখনও কয়েকটি ছাড়তে চাই।

breakবিবৃতি এছাড়াও কারো বা কিছু থেকে একটি বৈধ প্রতিক্রিয়ার জন্য কুশলী যখন পোলিং আসে। পরিবর্তে:

Ask a question
While the answer is invalid:
    Ask the question

আপনি কিছু সদৃশতা এবং ব্যবহার দূর করতে পারেন:

While True:
    Ask a question
    If the answer is valid:
        break

do-untilলুপ যে আমি আগে উল্লেখ করেন যে, নির্দিষ্ট সমস্যার জন্য আরো মার্জিত সমাধান:

Do:
    Ask a question
    Until the answer is valid

কোনও সদৃশ, এবং breakপ্রয়োজন নেই ।


13

সবাই খুব ভাল ব্যাখ্যা দিয়েছে। আমি এখনও আমার উত্তর পোস্ট করছি কেবল একটি উদাহরণ দিতে যদি এটি সাহায্য করতে পারে।

// break statement
for (int i = 0; i < 5; i++) {
    if (i == 3) {
        break; // It will force to come out from the loop
    }

    lblDisplay.Text = lblDisplay.Text + i + "[Printed] ";
}

এখানে ফলাফল:

0 [মুদ্রিত] 1 [মুদ্রিত] 2 [মুদ্রিত]

সুতরাং 3 [মুদ্রিত] এবং 4 [মুদ্রিত] যখন বিরতি রয়েছে তখন প্রদর্শিত হবে না i == 3

//continue statement
for (int i = 0; i < 5; i++) {
    if (i == 3) {
        continue; // It will take the control to start point of loop
    }

    lblDisplay.Text = lblDisplay.Text + i + "[Printed] ";
}

এখানে ফলাফল:

0 [মুদ্রিত] 1 [মুদ্রিত] 2 [মুদ্রিত] 4 [মুদ্রিত]

সুতরাং i == 3 চলাকালীন 3 টি [মুদ্রিত] প্রদর্শিত হবে না


7

বিরতি

ব্রেক একটি লুপকে তাত্ক্ষণিকভাবে প্রস্থান করতে বাধ্য করে।

চালিয়ে

এটি বিরতির বিপরীতটি করে। লুপটি শেষ করার পরিবর্তে, তাৎক্ষণিকভাবে আবার লুপ করে, বাকী কোডটি এড়িয়ে চলে।


1
লুপের অবস্থাটিও চেক করে চালিয়ে যান :)
মঞ্জুরি দিয়ে

1
Continueএর বিপরীতে নয় break, breakলুপটি continueথামায়, বর্তমান পুনরাবৃত্তিটি থামায়।
স্টিভেন

6

সহজ উত্তর:

ব্রেক অবিলম্বে লুপ থেকে প্রস্থান করে। পরবর্তী আইটেমটি প্রক্রিয়া শুরু করুন
Continue (যদি কিছু থাকে তবে / কিছুক্ষণের জন্য মূল্যায়ন লাইনে ঝাঁপিয়ে)


6

উদাহরণস্বরূপ

foreach(var i in Enumerable.Range(1,3))
{
    Console.WriteLine(i);
}

মুদ্রণ 1, 2, 3 (পৃথক লাইনে)।

আই = 2 এ বিরতির শর্ত যুক্ত করুন

foreach(var i in Enumerable.Range(1,3))
{
    if (i == 2)
        break;

    Console.WriteLine(i);
}

এখন লুপটি 1 টি প্রিন্ট করে এবং থামে।

একটি বিরতি দিয়ে বিরতি প্রতিস্থাপন।

foreach(var i in Enumerable.Range(1,3))
{
    if (i == 2)
        continue;

    Console.WriteLine(i);
}

এখন লুপ প্রিন্ট 1 এবং 3 (2 এড়িয়ে যাওয়া)।

সুতরাং, breakলুপটি থামায়, যেখানে continueপরবর্তী পুনরাবৃত্তিতে যেতে হবে।


5

দুর্ভাগ্যক্রমে রুবি কিছুটা আলাদা। পিএস: আমার ভুল থেকে ভুল থাকলে ক্ষমাপ্রার্থীর প্রতি আমার স্মৃতিটি কিছুটা বিরক্ত

ব্রেক / চালিয়ে যাওয়ার পরিবর্তে এর ব্রেক / নেক্সট রয়েছে যা লুপের ক্ষেত্রে একই আচরণ করে

লুপস (অন্যান্য কিছুর মতো) হ'ল এক্সপ্রেশন এবং শেষ কাজটি তারা "ফিরিয়ে দেয়"। বেশিরভাগ সময়, লুপ থেকে রিটার্ন মান পাওয়া অর্থহীন, সুতরাং প্রত্যেকে এটি করে just

a = 5
while a < 10
    a + 1
end

আপনি তবে এটি করতে পারেন

a = 5
b = while a < 10
    a + 1
end # b is now 10

তবুও, প্রচুর রুবি কোড একটি ব্লক ব্যবহার করে একটি লুপ 'অনুকরণ করে'। ক্যানোনিকাল উদাহরণ

10.times do |x|
    puts x
end

যেহেতু কোনও ব্লকের ফলস্বরূপ লোকেরা কাজগুলি করতে চাওয়া অনেক বেশি সাধারণ, তাই এটি এখানে অগোছালো হয়ে যায়। ব্রেক / পরবর্তী অর্থ একটি ব্লকের প্রসঙ্গে বিভিন্ন জিনিস।

ব্রেকটি কোডটিকে ছাড়িয়ে যাবে যা ব্লক বলে

এর পরে ব্লকের বাকী কোডটি বাদ দেওয়া হবে এবং আপনি ব্লকের কলারে যা নির্দিষ্ট করেছেন তা 'ফিরে' আসবে। উদাহরণস্বরূপ এটির কোনও অর্থ নেই।

def timesten
    10.times{ |t| puts yield t }
end


timesten do |x|
   x * 2
end
# will print
2
4
6
8 ... and so on


timesten do |x|
    break
    x * 2
end
# won't print anything. The break jumps out of the timesten function entirely, and the call to `puts` inside it gets skipped

timesten do |x|
    break 5
    x * 2
end
# This is the same as above. it's "returning" 5, but nobody is catching it. If you did a = timesten... then a would get assigned to 5

timesten do |x|
    next 5
    x * 2
end 
# this would print
5
5
5 ... and so on, because 'next 5' skips the 'x * 2' and 'returns' 5.

তাই হ্যা. রুবি দুর্দান্ত, তবে এটিতে কিছু কিছু কর্ণ-কেস রয়েছে। এটি আমার ব্যবহারের বছরগুলিতে আমি দ্বিতীয়টি দেখেছি :-)


5

দয়া করে আমাকে স্পষ্ট করে বলতে দিন: নোট করুন যে ব্রেক বা না চালিয়ে যাওয়া আপনার প্রোগ্রামটি আবার চালু করবে; অর্থাত্ আমি একটি নির্দিষ্ট ত্রুটির জন্য আটকেছিলাম, তারপরে এটি লগ করার পরে, আমি পুনরায় প্রক্রিয়াকরণটি আবার শুরু করতে চেয়েছিলাম, এবং পরবর্তী সারির মধ্যে আরও কোড টাস্ক ছিল, তাই আমি কেবল এটির মধ্য দিয়ে যেতে দিলাম।


3

পূর্বাভাস লুপ থেকে পুরোপুরি বিরতি , বিরতি ব্যবহার করা হয়;

লুপের পরবর্তী পুনরাবৃত্তিতে যেতে, চালিয়ে যাওয়া ব্যবহার করা হয়;

বিরতি কার্যকর যদি আপনি অবজেক্টের (যেমন একটি ডেটাটেবলের সারিগুলির) সংগ্রহের মধ্য দিয়ে লুপ করছেন এবং আপনি একটি নির্দিষ্ট ম্যাচ সন্ধান করছেন, যখন আপনি সেই ম্যাচটি খুঁজে পান, তখন বাকি সারিগুলির মধ্য দিয়ে চালিয়ে যাওয়ার দরকার নেই, তাই আপনি ব্রেক করতে চান বাইরে।

আপনি যখন লুপের পুনরাবৃত্তির পক্ষে যা প্রয়োজন তা পূরণ করে চালিয়ে যাওয়া কার্যকর useful আপনি সাধারণত একটি if এর পরে চালিয়ে যাবেন ।


2

আপনি যদি বিরতি ব্যবহার করতে না চান তবে আপনি কেবলমাত্র আমার মানটি এমনভাবে বাড়ান যাতে এটি পুনরাবৃত্তির শর্তটিকে মিথ্যা করে দেয় এবং পরবর্তী পুনরাবৃত্তির উপর লুপটি কার্যকর হবে না।

for(int i = 0; i < list.Count; i++){
   if(i == 5)
    i = list.Count;  //it will make "i<list.Count" false and loop will exit
}

0

অন্যান্য ভাষা হিসাবে:

'VB
For i=0 To 10
   If i=5 then Exit For '= break in C#;
   'Do Something for i<5
next

For i=0 To 10
   If i=5 then Continue For '= continue in C#
   'Do Something for i<>5...
Next
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.