JavaRush /Java Blog /Random-ID /Operator Lompat
articles
Level 15

Operator Lompat

Dipublikasikan di grup Random-ID
Java mendukung tiga operator lompat - break, continuedan return. Mereka mentransfer kendali ke bagian lain dari program Anda. Mari kita pertimbangkan masing-masing operator secara detail. Operator transisi - 1

Menggunakan operatorbreak

Operator breakdi Java digunakan dalam tiga kasus. Pertama, seperti yang telah Anda lihat, ini mengakhiri rangkaian pernyataan di cabang pernyataan switch. Kedua, ini bisa digunakan untuk keluar dari lingkaran. Ketiga, ini dapat digunakan sebagai bentuk operator lompat tanpa syarat yang "beradab" goto. Bagian ini menjelaskan dua kasus terakhir. Gunakan breakuntuk keluar dari perulangan Dengan menggunakan break, Anda dapat memaksa perulangan untuk segera berakhir, melewati ekspresi kondisional dan kode yang tersisa di badan perulangan. Ketika sebuah pernyataan breakditemui dalam satu perulangan, perulangan kedua berakhir dan kendali program ditransfer ke pernyataan berikutnya. Contoh sederhana:
// Использование 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("Цикл завершен.");
  }
}
Program ini menghasilkan keluaran sebagai berikut:
i: 0
i: 1
i: 2
i: 3
Цикл завершен.
Meskipun loop fordirancang di sini untuk mengeksekusi pernyataannya dari 0 hingga 99 kali, operator breakmenyebabkannya berhenti lebih awal ketika i bernilai 4. Operator breakdapat digunakan dengan loop Java mana pun, termasuk loop tak terbatas yang sengaja dibuat. Misalnya, di bawah ini adalah program sebelumnya yang dikodekan menggunakan loop while. Output dari program ini sama dengan pendahulunya.
// Использование 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("Цикл завершен.");
  }
}
Ketika digunakan dalam satu set perulangan bersarang, pernyataan tersebut breakhanya akan keluar dari perulangan terdalam. Misalnya:
// Использование 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("Цикл завершен.");
  }
}
Program ini menghasilkan keluaran sebagai berikut:
Итерация 0: 0 1 2 3
Итерация 1: 0 1 2 3
Итерация 2: 0 1 2 3
Цикл завершен.
Seperti yang Anda lihat, pernyataan breakdi perulangan bagian dalam hanya menyebabkan perulangan itu berakhir. Lingkaran luar tidak terpengaruh. Mari kita membuat dua komentar lagi mengenai break. Pertama, beberapa pernyataan mungkin muncul dalam satu lingkaran break. Namun, berhati-hatilah. Terlalu banyak dari mereka cenderung merusak struktur kode Anda. Kedua, break, yang mengakhiri - operator switch, hanya mempengaruhi operator - tertentu switch(dan bukan loop yang menyertakannya). Komentar: Breaktidak dirancang sebagai cara normal untuk mengakhiri loop. Tujuan ini dilayani oleh ekspresi kondisional header loop. Operator breakharus digunakan untuk memutus perulangan hanya ketika situasi khusus tertentu muncul.

Gunakan breaksebagai formulirgoto

Selain digunakan dalam pernyataan switch dan loop, breakini juga dapat digunakan sendiri sebagai bentuk "beradab" dari goto. Java tidak mengandung operator gotokarena ia menjalankan cabang dengan cara yang sewenang-wenang dan tidak terstruktur. Kode yang menggunakan .intensif gotobiasanya sulit untuk dipahami dan dipelihara. Ini juga mengesampingkan beberapa optimasi kompiler. Namun demikian, ada beberapa bagian dalam program di mana gotoaliran kendali merupakan konstruksi yang berharga dan sah. Misalnya, gotoini bisa berguna saat Anda keluar dari kumpulan loop yang sangat bertumpuk. Untuk menangani situasi seperti itu, Java mendefinisikan bentuk operator yang diperluas break. Dengan menggunakannya, Anda dapat keluar dari satu atau lebih blok kode. Blok-blok ini tidak perlu menjadi bagian dari loop atau pernyataan switch. Ini bisa berupa blok apa saja. Selanjutnya, Anda dapat menentukan dengan tepat di mana eksekusi akan dilanjutkan karena formulir ini breakberfungsi dengan tanda dan memberikan manfaat goto, melewati permasalahannya. Pernyataan breakberlabel mempunyai bentuk umum sebagai berikut: break label; Berikut labeladalah nama label yang mengidentifikasi beberapa blok kode. Ketika formulir ini breakdijalankan, kontrol ditransfer dari blok kode bernama (yang labelnya ditentukan dalam pernyataan break) ke pernyataan yang mengikuti blok tersebut. Blok kode yang ditandai harus menyertakan pernyataan ini break, tetapi penyertaannya tidak harus langsung (yaitu, breakpenyertaannya tidak dapat dimasukkan secara langsung ke dalam blok dengan labelnya sendiri, tetapi ke dalam blok bersarang di dalamnya, mungkin juga ditandai ). Ini berarti Anda dapat menggunakan operator yang ditandai breakuntuk keluar dari sekumpulan blok bersarang. Namun Anda tidak dapat menggunakan breakblok kode yang tidak menyertakan file break. Untuk memberi nama suatu blok, letakkan label di awal blok (sebelum kurung kurawal pembuka). Label adalah pengidentifikasi Java valid apa pun yang diikuti dengan titik dua. Setelah memberi label pada suatu blok, labelnya dapat digunakan sebagai argumen kepada operator break. Hal ini akan menyebabkan eksekusi dilanjutkan dari akhir blok yang ditandai. Misalnya, program berikut berisi tiga blok bersarang, masing-masing dengan labelnya sendiri. Operator breakbergerak maju, melewati ujung blok yang ditandai dengan label second, melewati dua operator println().
// Использование 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.");
    }
  }
}
Menjalankan program ini menghasilkan output berikut:
Перед оператором break.
Данный оператор размещен после блока second.
Salah satu kegunaan paling umum dari operator berlabel breakadalah untuk keluar dari loop bersarang. Misalnya, pada program berikut, loop luar hanya dijalankan satu kali:
// Использование 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("Цикл завершен.");
  }
}
Program ini menghasilkan output berikut:
Итерация 0: 0 1 2 3 4 5 6 7 8 9 Цикл завершен.
Sangat mudah untuk melihat bahwa ketika loop dalam diinterupsi sebelum akhir loop luar, kedua loop berakhir. Ingatlah bahwa Anda tidak dapat melakukan break-jump ke label mana pun yang tidak ditentukan untuk blok penutupnya. Misalnya, program berikut ini tidak valid dan tidak dapat dikompilasi:
// Эта программа содержит ошибку.
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 + " ");
    }
  }
}
Karena perulangan bertanda satu tidak menyertakan pernyataan break, maka tidak mungkin untuk mentransfer kendali ke blok ini.

Menggunakan operatorcontinue

Terkadang berguna untuk memulai iterasi berikutnya dari perulangan lebih awal. Artinya, Anda perlu terus mengeksekusi loop, tetapi berhenti memproses sisa kode di dalamnya untuk iterasi khusus ini. Faktanya, ini adalah gototransisi melewati operasi body berikutnya ke akhir blok loop. Tindakan ini dilakukan oleh operator continue. Dalam perulangan, operator whiledan menyebabkan kendali ditransfer langsung ke ekspresi kondisional yang mengendalikan perulangan. Dalam sebuah perulangan, kontrol pertama-tama diteruskan ke bagian iteratif dari pernyataan dan kemudian ke ekspresi kondisional. Untuk ketiga loop, kode perantara apa pun dilewati. Contoh program yang digunakan untuk mencetak dua angka pada setiap baris diberikan di bawah ini: do whilecontinueforforcontinue
// Демонстрирует 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("");
    }
  }
}
Kode ini menggunakan operasi %(modulo) untuk memeriksa apakah ada sesuatu iyang genap. Jika demikian, perulangan berlanjut tanpa mencetak karakter baris baru. Keluaran program:
0 1
2 3
4 5
6 7
8 9
Seperti halnya operator break, continueAnda dapat menentukan label yang menunjukkan loop mana yang akan dilanjutkan. Contoh program yang digunakan continueuntuk mencetak tabel perkalian segitiga dari 0 sampai 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();
  }
}
Pernyataan continuedalam contoh ini mengakhiri evaluasi perulangan j, dan berlanjut dengan iterasi berikutnya dari perulangan yang digerakkan oleh i. Keluaran dari program ini:
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
Hal ini sangat jarang berguna continue. Salah satu alasannya adalah Java menyediakan serangkaian pernyataan perulangan yang sesuai dengan sebagian besar aplikasi. Namun, untuk situasi khusus di mana iterasi perlu dihentikan lebih awal, pernyataan tersebut continuemenyediakan cara terstruktur untuk menyelesaikan tugas ini.

Operatorreturn

Pernyataan kontrol terakhir adalah return. Ini digunakan untuk kembali secara eksplisit dari suatu metode, yaitu mentransfer kendali program kembali ke program pemanggil. Operator tersebut returntergolong dalam operator transisi. Meskipun pembahasan lengkapnya harus menunggu sampai metodenya dibahas, gambaran singkatnya disediakan di sini return. Operator returndapat digunakan di mana saja dalam suatu metode untuk melompat kembali ke program yang memanggil metode tersebut. Pernyataan tersebut returnsegera mengakhiri eksekusi metode yang digunakannya. Contoh berikut menggambarkan hal ini:
// Демонстрирует return.
public class Return {

  public static void main(String[] args) {
    boolean t = true;
    System.out.println("Перед оператором return.");
    if (t) {
      return; // возврат в вызывающую программу
    }
    System.out.println("Этот оператор никогда не выполнится.");
  }
}
Ini returnkembali ke sistem Java saat runtime, karena sistemlah yang memanggil file main(). Keluaran dari program ini:
Перед оператором return.
Anda mungkin memperhatikan bahwa pernyataan akhir println()tidak dijalankan. Pada waktu eksekusi, returnkendali ditransfer kembali ke program pemanggil. Satu catatan terakhir. Pada program sebelumnya, ifoperator (t) diperlukan. Tanpanya, kompiler Java akan memunculkan kesalahan "kode tidak dapat dijangkau" karena ia mengetahui bahwa pernyataan terakhir println()tidak akan pernah dieksekusi. Untuk mencegah kesalahan ini, operator (t) digunakan if; ini menipu kompiler demi demonstrasi ini. Tautan ke sumber asli: Operator transisi
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION