জাভা কোডে "লুপ:"। এটি কী এবং কেন এটি সংকলন করে?


113

এই কোডটি আমাকে কয়েক মিনিটের জন্য আমার পর্দায় তাকিয়ে রেখেছে:

loop:
for (;;) {
    // ...
}

( এখানে 137 লাইন )

আমি এটি আগে কখনও দেখিনি, এবং আমার কোনও ধারণা ছিল না জাভাতে একটি "লুপ" কীওয়ার্ড রয়েছে (নেটবিয়ানগুলি এটি কীওয়ার্ডের মতো রঙ করে না), এবং এটি জেডিকে 6 এর সাথে জরিমানা সংকলন করে।

এর ব্যাখ্যা কী?

উত্তর:


205

এটা একটা নয় keywordএটি একটি হল label

ব্যবহার:

    label1:
    for (; ; ) {
        label2:
        for (; ; ) {
            if (condition1) {
                // break outer loop
                break label1;
            }
            if (condition2) {
                // break inner loop
                break label2;
            }
            if (condition3) {
                // break inner loop
                break;
            }
        }
    }

ডকুমেন্টেশন


19
উল্লেখযোগ্যভাবে, ওপি সম্ভবত গোটো / লেবেল ধারণার সাথে পরিচিত হতে পারে না, খুব সাধারণ পরিস্থিতিতে (উদাহরণস্বরূপ, একাধিক নেস্টেড লুপগুলি শর্টকাট করার জন্য) সাধারণত এটিকে একটি খারাপ অভ্যাস হিসাবে বিবেচনা করা হয়।
হাইলেম

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

73

অন্যান্য পোস্টার যেমন বলেছে, এটি একটি লেবেল, কোনও কীওয়ার্ড নয়। লেবেল ব্যবহার আপনাকে এ জাতীয় কাজ করতে দেয়:

outer: for(;;) {
   inner: for(;;) {
     break outer;
   }
}

এটি বাইরের লুপটি ভাঙ্গার অনুমতি দেয়।

ডকুমেন্টেশনের লিঙ্ক


31

প্রশ্নের উত্তর দেওয়া হয়েছে, তবে পার্শ্ব নোট হিসাবে:

আমি একটি লা সাক্ষাত্কারের প্রশ্ন শুনেছি "কেন এই জাভা কোডটি বৈধ?" (সরল উদাহরণটি ছিনিয়ে এনেছে; এখানে টিম বাথের মধ্যবর্তী উদাহরণটি রয়েছে):

url: http://www.myserver.com/myfile.mp3
downLoad(url);

আপনি কি জানেন যে এই কোডটি কী (ভয়ঙ্কর বাদে)?

সমাধান: দুটি লেবেল urlএবং httpএকটি মন্তব্য www.myserver.com/myfile.mp3এবং একটি প্যারামিটারের সাথে একটি পদ্ধতি কল urlযা লেবেলের মতো একই নাম ( ) রয়েছে। হ্যাঁ, এই সংকলনগুলি (যদি আপনি অন্য কোথাও পদ্ধতি কল এবং স্থানীয় ভেরিয়েবল সংজ্ঞায়িত করেন)।


এফওয়াইআই আপনার লুপের দরকার নেই; পরবর্তী লাইনে যথেষ্ট
টিম বাথ

আমাকে মনে করিয়ে দেওয়ার জন্য ধন্যবাদ, আমি মনে করি যে প্রশ্নটিতে কোনও লুপ ছিল না। আমি আমার উত্তরটি সম্পাদনা করব (আমাকে কখনই এই প্রশ্ন জিজ্ঞাসা করা হয়নি তবে সাক্ষাত্কারকারক আমার একজন প্রাক্তন সহকর্মী)
সান প্যাট্রিক ফ্লয়েড

16

এটি কোনও কীওয়ার্ড নয়, এটি একটি লেবেল। এটি নেস্টেড লুপগুলির মধ্যে breakএবং continueকীওয়ার্ডগুলির সাথে ব্যবহার করতে বোঝানো হয়েছে :

outer:
for(;;){
    inner:
    for(;;){
        if(){
            break inner; // ends inner loop
        } else {
            break outer; // ends outer loop
        }
    }
}

innerলেবেলটি এখানে অকেজো, break;যথেষ্ট
জার্তাস

12
লুপটি ভাঙার দুটি উপায় থাকলে, আমি innerস্পষ্টতার জন্য লেবেলের প্রশংসা করি ।
স্টিভ জ্যাকসন

1
@ জার্টাস: আমি মনে করি তিনি কেবল বক্তব্যটি প্রদর্শন করছেন। তবে স্টিভ জ্যাকসনের প্রতি, স্ব-ডকুমেন্টেশনের উদ্দেশ্যে এটি যাইহোক বলা ভাল ধারণা হতে পারে।
জয়

5

এটি কোনও কীওয়ার্ড নয়; এটি একটি এর ট্যাগ

এটি আপনাকে একটি লেবেলযুক্ত breakএবং লেবেল দেওয়ার অনুমতি দেয় continue


4

এটি org.Live.java- এর উত্তরে সাইনাইজারের মন্তব্যের জবাব, তবে আমি কিছু কোড রাখতে চাইছিলাম যাতে আমি মন্তব্যটির বৈশিষ্ট্যটি ব্যবহার করতে পারি না।

যদিও এটি খুব বিরল যে আমি "ব্রেক লেবেল" এর জন্য একটি ব্যবহার খুঁজে পাই, এটি কখনও কখনও ঘটে যায়। সর্বাধিক সাধারণ ক্ষেত্রে হ'ল আমি যখন এমন কিছু সন্ধান করতে যা এমন কাঠামোর মধ্যে যা অনুসন্ধানের জন্য নেস্টেড লুপের প্রয়োজন হয়, যেমন:

search:
for (State state : stateList)
{
  for (City city : state.cityList)
  {
    if (city.zipcode.equals(wantZip))
    {
      doSomethingTo(city);
      break search;
    }
  }
}

সাধারণত এ জাতীয় ক্ষেত্রে আমি পুরো জিনিসটিকে সাব্রোটিনের মধ্যে ঠেলে রাখি যাতে আঘাতের সাহায্যে আমি পাওয়া বস্তুকে ফিরে আসতে পারি এবং এটি লুপের নীচে পড়ে গেলে আমি একটি পাওয়া যায় না এমন ইঙ্গিত করতে নাল ফিরে আসতে পারি, বা সম্ভবত একটি ব্যতিক্রম ছুঁড়ে ফেলি। তবে এটি মাঝে মাঝে দরকারী।

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

খুব দেরী সংযোজন:

আমি একবার কোডের দুর্দান্ত ঠাট্টা লাইনটি দেখেছি। প্রোগ্রামার লিখেছেন:

http://www.example.com/xyz.jsp
for (Foo foo1 : foolist)

তিনি আসলে "উদাহরণ.com" বলেননি তবে আমাদের সংস্থার ওয়েব সাইট।

কোডটি একটি ইউআরএল আছে যে এটি ধারণা দেয়। এটি সফলভাবে সংকলন করে, যেমন এটি কিছু করে। কিন্তু এটা কি কাজ করে?

বাস্তবে এটি কিছুই করে না। "http:" হ'ল একটি লেবেল যা তিনি কখনই উল্লেখ করেন না। তারপরে "//" বাকী রেখাটি একটি মন্তব্য করে।


4

এটি একটি বিরতি পয়েন্ট লেবেল, যাতে আপনি যে অভ্যন্তরীণ অন্তর্ভুক্ত হন তার চেয়ে বরং নির্দিষ্ট লুপটি ভেঙে ফেলতে পারবেন।

এটি 148 লাইনে ব্যবহৃত হয়েছে ।



2

এটি একটি লেবেল, যদিও নিম্নলিখিত উদাহরণটি দেখুন:

int a = 0;
int b = 0
while (a<10){
    firstLoop:
    a++;
    while(true){
        b++
        if(b>10){
            break firstLoop;
        }
    }
 }

যখন b>10এক্সিকিউশন ফ্লো বাইরের লুপে যায়।


1

এটি একটি লেবেল এবং জাভাতে লেবেলগুলি লুপগুলিতে অতিরিক্ত নিয়ন্ত্রণের জন্য breakএবং continueকী শব্দের সাথে ব্যবহার করা যেতে পারে ।

এখানে এটি বরং একটি ভাল উপায়ে ব্যাখ্যা করা হয়েছে:

জাভাতে ভাবছেন, বিরতি দিন এবং চালিয়ে যান


1

এটি কোনও কীওয়ার্ড নয়, তবে একটি লেবেলforলুপের ভিতরে যদি আপনি লিখেন break loop;এবং আপনি সেই লুপটি প্রস্থান করেন।


0

এটি একটি লেবেল। সাধারণত জাভাতে ব্যবহৃত লেবেলটি কাঙ্ক্ষিত স্থানে নিয়ন্ত্রণ প্রবাহ স্থানান্তর করতে ব্যবহৃত হয়, যখন সমস্ত কীওয়ার্ড যেমন চালিয়ে যাওয়া এবং বিরতি দেওয়া হয়, তার নির্দিষ্ট নির্দিষ্ট অবস্থান থাকে।

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