Mengelakkan Aliran Berserabut
Bila label membantu atau menyusahkan.
Mengelakkan Aliran Berserabut ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah Itu Aliran Spageti?
"Aliran spageti" menerangkan kod yang laluannya melompat ke sana sini sehingga sukar diikuti, seperti mi yang bersimpul.
Terlalu banyak break, continue dan label yang dihimpunkan boleh menghasilkan keadaan yang berserabut ini.
Pelajaran ini menunjukkan cara menggunakan kawalan aliran dengan sengaja supaya gelung anda kekal jelas.
Label Berkuasa tetapi Berisiko
break dan continue berlabel ialah alat yang berguna, tetapi kedua-duanya membolehkan kod melompat merentasi beberapa gelung.
Jika digunakan di merata-rata tempat, kedua-duanya memaksa pembaca menjejaki banyak laluan yang mungkin pada masa yang sama.
Matlamatnya bukan untuk mengelakkan label sepenuhnya, tetapi menggunakannya hanya apabila label benar-benar memudahkan logik.
Contoh yang Berserabut
Gelung ini mencampurkan continue berlabel, break berlabel dan break biasa di satu tempat.
Kod ini berfungsi, tetapi menjejaki alirannya memerlukan usaha yang tinggi. Itu ialah tanda amaran.
public class Main {
public static void main(String[] args) {
outer:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (j == 1) continue outer;
if (i == 2) break outer;
if (i + j == 3) break;
System.out.println(i + "," + j);
}
}
}
}Memfaktorkan Semula dengan Kaedah
Selalunya, pembaikan yang paling kemas ialah memindahkan gelung dalaman ke dalam kaedahnya sendiri dan menggunakan return.
Return daripada kaedah keluar dengan kemas tanpa sebarang label.
public class Main {
static int findFirst(int[] arr, int target) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == target) {
return i;
}
}
return -1;
}
public static void main(String[] args) {
int[] nums = {5, 8, 3, 9};
System.out.println(findFirst(nums, 3));
}
}Mengapa return Lebih Mudah Dibaca
Dalam kaedah di atas, return i; menghentikan carian sebaik sahaja padanan ditemui.
Tiada label, tiada pemboleh ubah penanda dan tiada break bersarang untuk dijejaki.
Untuk carian bersarang, mengekstrak kaedah dan menggunakan return biasanya lebih jelas daripada break berlabel.
Utamakan Syarat yang Jelas
Kadang-kadang anda tidak memerlukan break atau continue langsung. Syarat gelung yang ditulis dengan baik boleh menyatakan idea yang sama.
Di sini kita berhenti secara semula jadi apabila nilai ditemui, tanpa break.
public class Main {
public static void main(String[] args) {
int[] nums = {2, 4, 6, 8};
int i = 0;
boolean found = false;
while (i < nums.length && !found) {
if (nums[i] == 6) {
found = true;
} else {
i++;
}
}
System.out.println(found ? "Found at " + i : "Missing");
}
}Klausa Pengawal dengan continue
continue biasa sebenarnya boleh mengurangkan gelung bersarang. Langkau item yang tidak dikehendaki lebih awal, kemudian pastikan logik utama kekal rata.
Ini mengelakkan bentuk piramid yang dalam akibat pernyataan if.
public class Main {
public static void main(String[] args) {
String[] names = {"Ann", "", "Bob", ""};
for (String name : names) {
if (name.isEmpty()) {
continue;
}
System.out.println("Hello, " + name);
}
}
}Apabila break Berlabel Wajar Digunakan
Label tidak dilarang. Satu break berlabel dalam carian bersarang yang sebenar boleh menjadi pilihan yang paling jelas.
Ukuran sebenarnya ialah kejujuran: adakah label menjadikan tujuan itu jelas, atau adakah label menyembunyikan kekusutan?
Satu label yang bertujuan lebih baik daripada tiga pemboleh ubah penanda.
public class Main {
public static void main(String[] args) {
int[][] grid = {{1, 2}, {3, 4}};
scan:
for (int[] row : grid) {
for (int v : row) {
if (v == 3) {
System.out.println("Found 3");
break scan;
}
}
}
}
}Elakkan Penyarangan Mendalam
Kod berserabut sering berpunca daripada gelung yang disarang hingga empat atau lima peringkat.
Jika anda sampai ke tahap itu, tanyakan sama ada kaedah pembantu, struktur data yang berbeza atau strim boleh meratakan logik tersebut.
Kod dengan penyarangan cetek lebih mudah difahami berbanding lompatan yang terlalu bijak.
Senarai Semak Ringkas
Sebelum menambah label, tanyakan: Bolehkah kaedah menggunakan pulangan melakukan perkara ini? Bolehkah syarat gelung yang jelas melakukan perkara ini? Bolehkah arahan penerusan dalam klausa pengawal melakukan perkara ini?
Jika ya, utamakan pilihan tersebut. Jika label masih merupakan pilihan yang paling mudah, gunakannya dan berikan nama yang baik.
Utamakan Kebolehbacaan
Aliran kawalan ialah alat untuk kejelasan, bukan untuk menunjuk-nunjuk. Gelung terbaik ialah gelung yang difahami oleh rakan sepasukan sepintas lalu.
Hadkan lompatan, namakan label dengan bermakna dan keluarkan kaedah apabila penyarangan bertambah.
Dengan cara ini, aliran kawalan anda kekal kemas dan tidak berserabut.
Semakan Pantas
Pilih cara paling kemas untuk keluar daripada carian bersarang dalam kebanyakan keadaan.
Ringkasan
Aliran berserabut berpunca daripada terlalu banyak lompatan yang berbelit-belit. Elakkannya dengan mengutamakan kaedah yang menggunakan pulangan, syarat gelung yang jelas dan arahan penerusan dalam klausa pengawal.
Gunakan arahan henti atau penerusan berlabel hanya apabila arahan tersebut benar-benar menjelaskan carian bersarang, dan sentiasa namakan label dengan baik.
Pelajari Java dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Soalan Lazim
Adakah pelajaran “Mengelakkan Aliran Berserabut” percuma?
Ya — teks penuh “Mengelakkan Aliran Berserabut” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Mengelakkan Aliran Berserabut”?
Bila label membantu atau menyusahkan. Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Java Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Mengelakkan Aliran Berserabut” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- break dan continue
- break Berlabel
- continue Berlabel
- Mengelakkan Aliran Berserabut