Tidak ada yang salah secara inheren atau bahkan buruk tentang loop bersarang. Namun mereka memiliki pertimbangan dan jebakan tertentu.
Artikel yang Anda pimpin, kemungkinan atas nama singkatnya atau karena proses psikologis yang dikenal sebagai dibakar, melompati spesifik.
Terbakar adalah ketika Anda memiliki pengalaman negatif dengan sesuatu yang melibatkan diri Anda, maka hindarilah. Misalnya saya mungkin memotong sayuran dengan pisau tajam dan memotong sendiri. Saya kemudian bisa mengatakan pisau tajam itu buruk, jangan menggunakannya untuk memotong sayuran untuk mencoba membuat pengalaman buruk itu tidak mungkin terjadi lagi. Itu jelas sangat tidak praktis. Pada kenyataannya Anda hanya perlu berhati-hati. Jika Anda menyuruh orang lain untuk memotong sayuran maka Anda akan merasakan hal ini lebih kuat. Jika saya menyuruh anak-anak untuk memotong sayuran, saya akan merasa sangat kuat untuk memberitahu mereka untuk tidak menggunakan pisau tajam terutama jika saya tidak bisa mengawasi mereka dengan cermat.
Masalahnya dalam pemrograman adalah bahwa Anda tidak akan memenuhi efisiensi puncak jika Anda selalu lebih memilih keselamatan terlebih dahulu. Dalam hal ini anak-anak hanya dapat memotong sayuran lunak. Dihadapkan dengan hal lain dan mereka hanya akan membuatnya berantakan menggunakan pisau tumpul. Sangat penting untuk mempelajari penggunaan loop yang tepat termasuk loop bersarang dan Anda tidak dapat melakukannya jika mereka dianggap buruk dan Anda tidak pernah mencoba menggunakannya.
Seperti banyak jawaban di sini menunjukkan nested for loop adalah indikasi karakteristik kinerja program Anda yang mungkin secara eksponensial lebih buruk setiap bersarang. Yaitu, O (n), O (n ^ 2), O (n ^ 3) dan seterusnya yang terdiri dari O (n ^ kedalaman) di mana kedalaman mewakili berapa banyak loop yang Anda buat bersarang. Saat sarang Anda tumbuh, waktu yang dibutuhkan tumbuh secara eksponensial. Masalahnya dengan ini adalah bahwa itu bukan kepastian waktu atau kompleksitas ruang Anda adalah (cukup sering a * b * c tetapi tidak semua loop sarang dapat berjalan sepanjang waktu juga) juga bukan kepastian bahwa Anda akan memiliki masalah kinerja bahkan jika itu.
Bagi banyak orang, terutama mahasiswa, penulis dan dosen yang jujur, jarang memprogram untuk hidup atau sehari-hari untuk loop juga bisa menjadi sesuatu yang tidak biasa dan yang menyebabkan terlalu banyak beban kognitif pada pertemuan awal. Ini adalah aspek yang bermasalah karena selalu ada kurva belajar dan menghindarinya tidak akan efektif dalam mengubah siswa menjadi programmer.
Loop bersarang bisa menjadi liar, yaitu mereka dapat berakhir bersarang sangat dalam. Jika saya melewati setiap benua, lalu melalui setiap negara, lalu melalui setiap kota, lalu melalui setiap toko, lalu melalui setiap rak, lalu melalui setiap produk jika itu adalah kaleng kacang melalui masing-masing kacang dan mengukur ukurannya untuk mendapatkan rata-rata maka Anda dapat melihat bahwa sarang akan sangat dalam. Anda akan memiliki piramida dan banyak ruang terbuang dari margin kiri. Anda bahkan mungkin keluar dari halaman.
Ini adalah masalah yang akan lebih signifikan secara historis di mana layar kecil dan resolusi rendah. Dalam kasus-kasus itu, bahkan beberapa tingkat sarang benar-benar dapat memakan banyak ruang. Ini adalah masalah yang lebih kecil hari ini di mana ambang batas lebih tinggi meskipun masih bisa menimbulkan masalah jika ada cukup sarang.
Terkait adalah argumen estetika. Banyak orang tidak menemukan sarang untuk loop secara estetika berbeda dengan tata letak dengan keselarasan yang lebih konsisten ini mungkin atau mungkin tidak terkait dengan apa yang digunakan orang, pelacakan mata dan masalah lainnya. Namun bermasalah karena cenderung memperkuat diri dan pada akhirnya dapat membuat kode lebih sulit dibaca karena memecah blok kode dan merangkum loop di belakang abstraksi seperti fungsi juga berisiko memecah pemetaan kode untuk aliran eksekusi.
Ada kecenderungan alami terhadap apa yang digunakan orang. Jika Anda memprogram sesuatu dengan cara paling sederhana, probabilitas tidak perlu bersarang adalah yang tertinggi, probabilitas kebutuhan satu tingkat turun dengan urutan besarnya, probabilitas untuk tingkat lain turun lagi. Frekuensi menurun dan pada dasarnya berarti semakin dalam sarang semakin kurang terlatih indra manusia untuk mengantisipasinya.
Terkait dengan itu adalah bahwa dalam konstruksi kompleks mana pun, yang dapat dianggap sebagai loop bersarang, maka Anda harus selalu bertanya apakah solusi yang paling sederhana karena ada potensi untuk solusi yang terlewatkan yang membutuhkan lebih sedikit loop. Ironisnya, solusi bersarang seringkali merupakan cara paling sederhana untuk menghasilkan sesuatu yang bekerja dengan jumlah minimum usaha, kompleksitas, dan beban kognitif. Biasanya sarang untuk loop. Jika Anda mempertimbangkan misalnya salah satu jawaban di atas di mana cara yang jauh lebih cepat daripada nested for loop juga jauh lebih kompleks dan terdiri dari kode yang jauh lebih banyak.
Diperlukan banyak perawatan karena sering kali memungkinkan untuk melakukan lilitan secara abstrak atau meratakannya dengan hasil akhirnya yang pada akhirnya menjadi obat yang lebih buruk daripada penyakitnya, terutama jika Anda tidak misalnya menerima peningkatan kinerja yang terukur dan signifikan dari upaya tersebut.
Sangat umum bagi orang untuk sering mengalami masalah kinerja dalam kaitannya dengan loop yang memberi tahu komputer untuk mengulangi suatu tindakan berkali-kali dan secara inheren akan sering terlibat dalam kemacetan kinerja. Sayangnya tanggapan terhadap hal ini bisa sangat dangkal. Sudah menjadi hal biasa bagi orang-orang untuk melihat loop dan melihat masalah kinerja di mana tidak ada dan kemudian menyembunyikan loop dari penglihatan tanpa efek nyata. Kode "terlihat" cepat tetapi letakkan di jalan, kunci kontak, injak akselerator dan lihat speedometer dan Anda mungkin menemukan ini masih secepat wanita tua berjalan di bingkai zimmer-nya.
Persembunyian semacam ini mirip dengan jika Anda memiliki sepuluh perampok di rute Anda. Jika alih-alih memiliki rute lurus ke tempat Anda ingin pergi, Anda mengaturnya sehingga ada perampok di belakang setiap sudut maka memberikan ilusi saat Anda memulai perjalanan Anda bahwa tidak ada perampok. Keluar dari akal pikiran. Anda masih akan dirampok sepuluh kali tetapi sekarang Anda tidak akan melihatnya datang.
Jawaban atas pertanyaan Anda adalah keduanya, tetapi tidak ada kekhawatiran yang mutlak. Mereka sepenuhnya subjektif atau hanya obyektif kontekstual. Sayangnya kadang-kadang pendapat yang sepenuhnya subjektif atau lebih tepatnya mengambil preseden dan mendominasi.
Sebagai aturan praktis, jika perlu loop bersarang atau yang tampaknya seperti langkah jelas berikutnya, yang terbaik adalah tidak sengaja dan cukup melakukannya. Namun jika ada keraguan berlama-lama maka harus ditinjau kembali nanti.
Aturan praktis lainnya adalah Anda harus selalu memeriksa kardinalitas dan bertanya pada diri sendiri apakah loop ini akan menjadi masalah. Dalam contoh saya sebelumnya, saya pergi ke kota-kota. Untuk pengujian saya mungkin hanya melewati sepuluh kota tapi berapa jumlah maksimum kota yang bisa diharapkan dalam penggunaan di dunia nyata? Saya kemudian dapat mengalikannya dengan yang sama untuk benua. Ini adalah aturan praktis untuk selalu mempertimbangkan dengan loop terutama yang mengulang jumlah dinamis (variabel) kali apa yang mungkin diterjemahkan ke bawah baris.
Apapun selalu lakukan apa yang berhasil dulu. Cara ketika Anda melihat peluang untuk pengoptimalan, Anda dapat membandingkan solusi yang dioptimalkan dengan yang paling mudah untuk bekerja dan mengonfirmasi bahwa itu menghasilkan manfaat yang diharapkan. Anda juga dapat menghabiskan waktu terlalu lama untuk mengoptimalkan sebelum pengukuran dilakukan dan itu mengarah ke YAGNI atau banyak waktu terbuang dan tenggat waktu yang terlewat.