JavaRush /جاوا بلاگ /Random-UR /جمپ آپریٹرز
articles
سطح

جمپ آپریٹرز

گروپ میں شائع ہوا۔
جاوا تین جمپ آپریٹرز کو سپورٹ کرتا ہے break- continueاور return. وہ آپ کے پروگرام کے دوسرے حصے میں کنٹرول منتقل کرتے ہیں۔ آئیے آپریٹرز میں سے ہر ایک پر تفصیل سے غور کریں۔ ٹرانزیشن آپریٹرز - 1

آپریٹر کا استعمال کرتے ہوئےbreak

جاوا میں آپریٹر breakتین صورتوں میں استعمال ہوتا ہے۔ سب سے پہلے، جیسا کہ آپ پہلے ہی دیکھ چکے ہیں، یہ بیانات کی شاخوں میں بیانات کی ترتیب کو ختم کرتا ہے switch۔ دوم، یہ ایک لوپ کو توڑنے کے لئے استعمال کیا جا سکتا ہے. سوم، اسے غیر مشروط جمپ آپریٹر کی "مہذب" شکل کے طور پر استعمال کیا جا سکتا ہے goto۔ یہ حصہ آخری دو صورتوں کی وضاحت کرتا ہے۔ breakلوپ سے باہر نکلنے کے لیے استعمال کریں استعمال کر کے break، آپ لوپ کو فوری طور پر ختم کرنے پر مجبور کر سکتے ہیں، کنڈیشنل ایکسپریشن اور لوپ باڈی میں کسی بھی باقی کوڈ کو نظرانداز کر کے۔ جب breakایک لوپ کے اندر کسی بیان کا سامنا ہوتا ہے، تو دوسرا ختم ہو جاتا ہے اور پروگرام کا کنٹرول اس بیان میں منتقل ہو جاتا ہے جو اس کی پیروی کرتا ہے۔ سادہ مثال:
// Использование break для выхода из цикла.
public class BreakLoop {

  public static void main(String[] args) {
    for (int i = 0; i < 100; i++) {
      if (i == 4) {
        break; // завершить цикл, если i = 4
      }
      System.out.println("i: " + i);
    }
    System.out.println("Цикл завершен.");
  }
}
یہ پروگرام درج ذیل آؤٹ پٹ تیار کرتا ہے:
i: 0
i: 1
i: 2
i: 3
Цикл завершен.
اگرچہ لوپ کو forیہاں 0 سے 99 بار تک اس کے بیانات پر عمل درآمد کرنے کے لیے ڈیزائن کیا گیا ہے، آپریٹر breakاسے i 4 سال کی عمر میں جلد ختم کرنے کا سبب بنتا ہے۔ آپریٹر کو breakجاوا کے کسی بھی لوپ کے ساتھ استعمال کیا جا سکتا ہے، بشمول جان بوجھ کر لامحدود لوپس۔ مثال کے طور پر، نیچے ایک لوپ کا استعمال کرتے ہوئے کوڈ کیا گیا پچھلا پروگرام ہے while۔ اس پروگرام کا آؤٹ پٹ اس کے پیشرو جیسا ہی ہے۔
// Использование break для выхода из while-цикла.
public class BreakLoop2 {

  public static void main(String[] args) {
    int i = 0;
    while (i < 100) {
      if (i == 4) {
        break; // закончить цикл, если i = 4
      }
      System.out.println("i: " + i);
      i++;
    }
    System.out.println("Цикл завершен.");
  }
}
جب نیسٹڈ لوپس کے سیٹ کے اندر استعمال کیا جائے تو، بیان breakصرف اندرونی لوپ سے باہر نکلے گا۔ مثال کے طور پر:
// Использование break во вложенных циклах.
public class BreakLoop3 {

  public static void main(String[] args) {
    for (int i = 0; i < 3; i++) {
      System.out.print("Итерация " + i + ": ");
      for (int j = 0; j < 10; j++) {
        if (j == 4) {
          break; // закончить цикл, если j = 4
        }
        System.out.print(j + " ");
      }
      System.out.println();
    }
    System.out.println("Цикл завершен.");
  }
}
یہ پروگرام درج ذیل آؤٹ پٹ تیار کرتا ہے:
Итерация 0: 0 1 2 3
Итерация 1: 0 1 2 3
Итерация 2: 0 1 2 3
Цикл завершен.
breakجیسا کہ آپ دیکھ سکتے ہیں، اندرونی لوپ میں بیان صرف اس لوپ کو ختم کرنے کا سبب بنتا ہے۔ بیرونی لوپ متاثر نہیں ہوتا ہے۔ آئیے اس حوالے سے دو مزید تبصرے کرتے ہیں break۔ سب سے پہلے، متعدد بیانات ایک لوپ میں ظاہر ہو سکتے ہیں break۔ تاہم، محتاط رہیں. ان میں سے بہت سارے آپ کے کوڈ کو تباہ کرتے ہیں۔ دوسرا، breakجو - آپریٹر کو ختم کرتا ہے switch، صرف دیئے گئے switch- آپریٹر کو متاثر کرتا ہے (اور اس میں شامل لوپس کو نہیں)۔ تبصرہ: Breakلوپ ختم کرنے کے عام ذریعہ کے طور پر ڈیزائن نہیں کیا گیا تھا۔ یہ مقصد لوپ ہیڈر مشروط اظہار کے ذریعہ پورا کیا جاتا ہے۔ آپریٹر کو breakصرف اس صورت میں استعمال کیا جانا چاہئے جب کچھ خاص حالات پیدا ہوں۔

breakفارم کے طور پر استعمال کریں۔goto

سوئچ سٹیٹمنٹس اور لوپس میں استعمال ہونے کے علاوہ ، breakاسے اکیلے کی "مہذب" شکل کے طور پر بھی استعمال کیا جا سکتا ہے goto۔ جاوا آپریٹر پر مشتمل نہیں ہے gotoکیونکہ یہ برانچ کو من مانی اور غیر ساختہ طریقے سے انجام دیتا ہے۔ کوڈ جو استعمال کرتا ہے goto۔ یہ کچھ کمپائلر آپٹیمائزیشن کو بھی اوور رائیڈ کرتا ہے۔ تاہم، ایک پروگرام میں کئی جگہیں ایسی ہیں جہاں gotoکنٹرول کا بہاؤ ایک قابل قدر اور جائز تعمیر ہے۔ مثال کے طور پر، gotoیہ اس وقت کارآمد ہو سکتا ہے جب آپ لوپس کے گہرے نیسٹڈ سیٹ سے باہر نکل رہے ہوں۔ ایسے حالات کو سنبھالنے کے لیے، جاوا آپریٹر کی ایک توسیع شدہ شکل کی وضاحت کرتا ہے break۔ اس کا استعمال کرتے ہوئے، آپ کوڈ کے ایک یا زیادہ بلاکس سے باہر نکل سکتے ہیں۔ ان بلاکس کو لوپ یا بیان کا حصہ بننے کی ضرورت نہیں ہے switch۔ یہ کوئی بھی بلاک ہو سکتا ہے۔ اگلا، آپ اس بات کا تعین کر سکتے ہیں کہ عملدرآمد کہاں جاری رہے گا کیونکہ یہ فارم breakنشان کے ساتھ کام کرتا ہے اور gotoاس کے مسائل کو نظرانداز کرتے ہوئے، کے فوائد فراہم کرتا ہے۔ ایک breakلیبل والے بیان کی درج ذیل عمومی شکل ہوتی ہے: break label; یہاں labelایک لیبل کا نام ہے جو کوڈ کے کچھ بلاک کی شناخت کرتا ہے۔ جب اس فارم کو breakعمل میں لایا جاتا ہے، کنٹرول کو کوڈ کے نامزد بلاک (جس کا لیبل بیان میں بیان کیا گیا ہے break) سے اس بلاک کے بعد بیان میں منتقل کر دیا جاتا ہے۔ کوڈ کے نشان زدہ بلاک میں یہ بیان شامل ہونا ضروری ہے break، لیکن یہ ضروری نہیں ہے کہ یہ شمولیت براہ راست ہو (یعنی breakاسے براہ راست اس کے اپنے لیبل والے بلاک میں شامل نہیں کیا جا سکتا، بلکہ اس کے اندر اندر موجود بلاک میں، ممکنہ طور پر نشان زد بھی) . اس کا مطلب ہے کہ آپ breakنیسٹڈ بلاکس کے سیٹ سے بچنے کے لیے ایک نشان زدہ آپریٹر استعمال کر سکتے ہیں۔ لیکن آپ کوڈ کا ایسا بلاک استعمال نہیں کر سکتے breakجس میں شامل نہ ہو break۔ کسی بلاک کو نام دینے کے لیے، بلاک کے شروع میں ایک لیبل لگائیں (کھولنے والے گھنگھریالے منحنی خطوط وحدانی سے پہلے)۔ ایک لیبل کوئی بھی درست جاوا شناخت کنندہ ہے جس کے بعد بڑی آنت ہوتی ہے۔ کسی بلاک کو لیبل لگانے کے بعد، اس کے لیبل کو آپریٹر کے لیے دلیل کے طور پر استعمال کیا جا سکتا ہے break۔ اس کی وجہ سے نشان زد بلاک کے اختتام سے عملدرآمد جاری رہے گا۔ مثال کے طور پر، درج ذیل پروگرام میں تین نیسٹڈ بلاکس ہیں، ہر ایک کا اپنا لیبل ہے۔ آپریٹر دو آپریٹرز کو چھوڑ کر، breakلیبل کے ساتھ نشان زد بلاک کے اختتام سے آگے بڑھتا ہے ۔ secondprintln()
// Использование break How цивorзованной формы goto.
public class Break {

  public static void main(String[] args) {
    boolean t = true;
    first:
    {
      second:
      {
        third:
        {
          System.out.println("Перед оператором break.");
          if (t) {
            break second; // выход из блока second
          }
          System.out.println("Данный оператор никогда не выполнится");
        }
        System.out.println("Данный оператор никогда не выполнится ");
      }
      System.out.println("Данный оператор размещен после блока second.");
    }
  }
}
اس پروگرام کو چلانے سے درج ذیل آؤٹ پٹ پیدا ہوتا ہے:
Перед оператором break.
Данный оператор размещен после блока second.
لیبل والے آپریٹر کے سب سے عام استعمال میں سے ایک breakنیسٹڈ لوپس سے بچنا ہے۔ مثال کے طور پر، مندرجہ ذیل پروگرام میں بیرونی لوپ کو صرف ایک بار عمل میں لایا جاتا ہے:
// Использование break для выхода из вложенных циклов.
public class BreakLoop4 {

  public static void main(String[] args) {
    outer:
    for (int i = 0; i < 3; i++) {
      System.out.print("Итерация " + i + ": ");
      for (int j = 0; j < 100; j++) {

        if (j == 10) {
          break outer; // выйти из обоих циклов
        }
        System.out.print(j + " ");
      }
      System.out.println("Эта строка никогда не будет выведена");
    }
    System.out.println("Цикл завершен.");
  }
}
پروگرام مندرجہ ذیل آؤٹ پٹ پیدا کرتا ہے:
Итерация 0: 0 1 2 3 4 5 6 7 8 9 Цикл завершен.
یہ دیکھنا آسان ہے کہ جب اندرونی لوپ بیرونی کے اختتام سے پہلے روکا جاتا ہے، تو دونوں لوپ ختم ہو جاتے ہیں۔ اس بات کو ذہن میں رکھیں کہ آپ breakکسی بھی لیبل پر -جمپ نہیں کر سکتے جس کی تعریف انکلوژنگ بلاک کے لیے نہیں کی گئی ہے۔ مثال کے طور پر، درج ذیل پروگرام غلط ہے اور مرتب نہیں کرے گا:
// Эта программа содержит ошибку.
public class BreakErr {

  public static void main(String[] args) {
    one:
    for (int i = 0; i < 3; i++) {
      System.out.print("Итерация " + i + ": ");
    }
    for (int j = 0; j < 100; j++) {
      if (j == 10) {
        break one; //He верно!
      }
      System.out.print(j + " ");
    }
  }
}
چونکہ نشان زد لوپ میں کوئی بیان شامل نہیں ہوتا ہے break، اس لیے اس بلاک میں کنٹرول منتقل کرنا ممکن نہیں ہے۔

آپریٹر کا استعمال کرتے ہوئےcontinue

بعض اوقات لوپ کی اگلی تکرار جلد شروع کرنا مفید ہوتا ہے۔ یعنی، آپ کو لوپ پر عمل درآمد جاری رکھنے کی ضرورت ہے، لیکن اس مخصوص تکرار کے لیے اس کے باڈی میں باقی کوڈ پر کارروائی کرنا بند کر دیں۔ درحقیقت، یہ gotoلوپ بلاک کے اختتام تک جسم کی اگلی کارروائیوں سے پہلے کی منتقلی ہے۔ یہ عمل آپریٹر کے ذریعہ انجام دیا جاتا ہے continue۔ لوپس میں، whileاور do whileآپریٹر continueکنٹرول کو براہ راست مشروط اظہار میں منتقل کرنے کا سبب بنتا ہے جو لوپ کو کنٹرول کرتا ہے۔ ایک لوپ میں، forکنٹرول پہلے بیان کے تکراری حصے forاور پھر مشروط اظہار کو جاتا ہے۔ تینوں لوپس کے لیے، کسی بھی انٹرمیڈیٹ کوڈ کو نظرانداز کیا جاتا ہے۔ ایک مثال پروگرام جو continueہر لائن پر دو نمبر پرنٹ کرنے کے لیے استعمال کرتا ہے ذیل میں دیا گیا ہے۔
// Демонстрирует continue.
public class Continue {

  public static void main(String[] args) {
    for (int i = 0; i < 10; i++) {
      System.out.print(i + " ");
      if (i % 2 == 0) {
        continue;
      }
      System.out.println("");
    }
  }
}
یہ کوڈ یہ چیک کرنے کے لیے آپریشن %(موڈولو) کا استعمال کرتا ہے کہ آیا کوئی چیز iبرابر ہے۔ اگر ایسا ہے تو، لوپ ایک نئی لائن کریکٹر پرنٹ کیے بغیر جاری رہتا ہے۔ پروگرام آؤٹ پٹ:
0 1
2 3
4 5
6 7
8 9
جیسا کہ , آپریٹر کے ساتھ break، continueآپ ایک لیبل کی وضاحت کر سکتے ہیں جو یہ بتاتا ہے کہ کون سا انکلوژنگ لوپ جاری رکھنا ہے۔ ایک مثالی پروگرام جو continue0 سے 9 تک ایک مثلث ضرب جدول کو پرنٹ کرنے کے لیے استعمال کرتا ہے۔
// Использование continue с меткой.
public class ContinueLabel {

  public static void main(String[] args) {
    outer:
    for (int i = 0; i < 10; i++) {
      for (int j = 0; j < 10; j++) {
        if (j > i) {
          System.out.println();
          continue outer;
        }
        System.out.print(" " + (i * j));
      }
    }
    System.out.println();
  }
}
اس مثال میں بیان continueلوپ کی تشخیص کو ختم کرتا ہے j، اور اس کے ذریعے چلنے والے لوپ کی اگلی تکرار کے ساتھ جاری رہتا ہے i۔ اس پروگرام سے آؤٹ پٹ:
0
 0 1
 0 2 4
 0 3 6 9
 0 4 8 12 16
 0 5 10 15 20 25
 0 6 12 18 24 30 36
 0 7 14 21 28 35 42 49
 0 8 16 24 32 40 48 56 64
 0 9 18 27 36 45 54 63 72 81
یہ انتہائی شاذ و نادر ہی مفید ہے continue۔ اس کی ایک وجہ یہ ہے کہ جاوا لوپنگ بیانات کا ایک بھرپور سیٹ فراہم کرتا ہے جو زیادہ تر ایپلی کیشنز کے مطابق ہوتا ہے۔ تاہم، ان خاص حالات کے لیے جن میں تکرار کو جلد ختم کرنا ضروری ہے، بیان continueاس کام کو پورا کرنے کا ایک منظم طریقہ فراہم کرتا ہے۔

آپریٹرreturn

آخری کنٹرول بیان ہے return۔ یہ ایک طریقہ سے واضح طور پر واپس آنے کے لیے استعمال ہوتا ہے، یعنی یہ پروگرام کنٹرول کو کالنگ پروگرام میں واپس منتقل کرتا ہے۔ آپریٹر کو returnمنتقلی آپریٹر کے طور پر درجہ بندی کیا گیا ہے۔ اگرچہ طریقوں پر بحث ہونے تک اس کی مکمل بحث کا انتظار کرنا ضروری ہے، لیکن ایک مختصر جائزہ یہاں فراہم کیا جاتا ہے return۔ آپریٹر کو returnطریقہ کار میں کہیں بھی استعمال کیا جا سکتا ہے تاکہ طریقہ کار کو کال کرنے والے پروگرام پر واپس جائیں۔ بیان returnفوری طور پر اس طریقہ کار پر عمل درآمد کو ختم کر دیتا ہے جس میں یہ ہے۔ مندرجہ ذیل مثال اس کی وضاحت کرتی ہے:
// Демонстрирует return.
public class Return {

  public static void main(String[] args) {
    boolean t = true;
    System.out.println("Перед оператором return.");
    if (t) {
      return; // возврат в вызывающую программу
    }
    System.out.println("Этот оператор никогда не выполнится.");
  }
}
یہ returnرن ٹائم پر جاوا سسٹم میں واپس آجاتا ہے، کیونکہ یہ وہ سسٹم ہے جو کال کرتا ہے main()۔ اس پروگرام سے آؤٹ پٹ:
Перед оператором return.
آپ دیکھ سکتے ہیں کہ حتمی بیان پر println()عمل نہیں ہوا ہے۔ عمل درآمد کے وقت، returnکنٹرول واپس کالنگ پروگرام میں منتقل ہو جاتا ہے۔ ایک حتمی نوٹ۔ پچھلے پروگرام میں، if(t) آپریٹر ضروری ہے۔ اس کے بغیر، جاوا کمپائلر "ناقابل رسائی کوڈ" کی خرابی پھینک دے گا کیونکہ اسے معلوم ہوگا کہ آخری بیان println()کبھی بھی عمل میں نہیں آئے گا۔ اس غلطی کو روکنے کے لیے، (t) آپریٹر استعمال کیا جاتا ہے if؛ یہ اس مظاہرے کی خاطر کمپائلر کو چال کرتا ہے۔ اصل ماخذ سے لنک: ٹرانزیشن آپریٹرز
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION