Kebagian Jawa

Ada lelucon programmer lama yang berbunyi seperti ini: Seorang programmer yang marah berkata kepada programmer kedua, "Pergilah ke Neraka!" Programmer kedua menjawab dengan rasa jijik yang jelas, "Ugh, kamu dulu pergi!" Inti dari humor kutu buku ini adalah bahwa bagi banyak programmer, penggunaan "goto" adalah pelanggaran terburuk yang dapat dilakukan seseorang.

Ada beberapa alasan mengapa goto diremehkan di kalangan pengembang perangkat lunak. Makalah Edsger W. Dijkstra A Case Against the GO TO Statement adalah risalah yang relatif awal tentang kejahatan penyalahgunaan GOTO. Dalam artikel itu, Dijkstra menyatakan, "[Saya menjadi] yakin bahwa pernyataan go to harus dihapuskan dari semua bahasa pemrograman 'tingkat yang lebih tinggi'." Pernyataan Pergi Ke Dijkstra Dianggap Surat Berbahaya tidak hanya mengecam pernyataan goto, tetapi juga memulai tren ilmu komputer populer menggunakan frase "dianggap berbahaya" (meskipun kedua kata itu tampaknya digunakan di luar pemrograman sebelumnya).

Banyak programmer sejak Dijkstra telah digigit oleh beberapa masalah pemeliharaan yang terkait dengan penggunaan pernyataan goto dalam bahasa tertentu. Programmer lain telah mendengar cerita ini atau telah mendapatkan pesan "Jangan gunakan goto" begitu banyak sehingga mereka tidak perlu mengalami kekurangannya secara langsung untuk percaya bahwa mereka tidak boleh menggunakan GOTO.

Meskipun pernyataan goto tampaknya memiliki reputasi yang buruk secara umum, hal itu bukannya tanpa pendukungnya. Frank Rubin menulis tanggapan atas Pernyataan Go To Dijkstra yang Dianggap Berbahaya(Maret 1968) menyebut GOTO Dianggap Berbahaya 'Dianggap Berbahaya (Maret 1987). Dalam surat itu, Rubin menulis tentang surat Dijkstra yang berdampak begitu dramatis pada programmer sehingga "gagasan bahwa GOT0 berbahaya diterima hampir secara universal, tanpa pertanyaan atau keraguan." Mengenai pengamatan ini, Rubin menulis, "Ini telah menyebabkan kerusakan yang tak terhitung pada bidang pemrograman, yang telah kehilangan alat yang mujarab. Ini seperti tukang daging yang melarang pisau karena pekerja terkadang memotong dirinya sendiri." Perhatikan bahwa Dijkstra menanggapi surat Rubin dengan On a Somewhat Disappointing Correspondence. Halaman Wiki Cunningham & Cunningham Go To mengatakan ini tentang pernyataan goto: "Magang menggunakannya tanpa berpikir. Pekerja harian menghindarinya tanpa berpikir. Master menggunakannya dengan bijaksana."

Ada banyak sumber lain yang mencakup pro dan kontra penggunaan pernyataan goto. Saya tidak bermaksud mengulang debat itu di sini selain presentasi singkat dari sejarah awal kontroversi yang sudah dibahas. Saya telah mendengar beberapa pengembang Java menyatakan bahwa Java tidak memiliki pernyataan goto dan itulah yang ingin saya bahas di sisa posting blog ini.

Java tidak mencadangkan "goto" sebagai kata kunci yang dipesan. Namun, ini adalah kata kunci yang tidak digunakan. Artinya, meskipun kata kunci tidak benar-benar menghasilkan sesuatu yang produktif, kata kunci juga tidak dapat digunakan dalam kode untuk nama variabel atau konstruksi lain. Misalnya, kode berikut tidak akan dikompilasi:

package dustin.examples; /** * Class demonstrating Java's goto-like functionality. */ public class JavaGotoFunctionality { /** * Main executable function. * * @param arguments Command-line arguments: none expected. */ public static void main(final String[] arguments) { final String goto = "Go to bed!"; } } 

Jika saya mencoba mengompilasi kode itu, saya melihat kesalahan seperti yang ditunjukkan pada cuplikan layar berikutnya.

Pesan kesalahan "diharapkan" dengan penunjuk di spasi sebelum "goto" memberikan cukup petunjuk kepada pengembang Java yang berpengalaman untuk segera menyadari bahwa ada yang salah tentang penggunaan "goto". Namun, ini mungkin tidak begitu jelas bagi orang yang baru mengenal Java.

Saya biasanya tidak menggunakan konstruksi goto, tetapi saya juga mengenali bahwa ada situasi di mana penggunaannya membuat kode lebih mudah dibaca dan menggunakan solusi yang tidak terlalu gila daripada tidak menggunakannya. Di Java, ini juga telah direalisasikan dan dukungan disediakan untuk beberapa situasi paling umum di mana pernyataan goto akan paling berguna dan kemungkinan besar sebenarnya lebih disukai daripada alternatif. Contoh paling jelas dari ini adalah pernyataan berlabel breakdan berlabel continue. Ini dibahas dan didemonstrasikan di Java Tutorials bagian Pernyataan Bercabang.

Kemampuan untuk memberi label pada pernyataan tertentu dan kemudian memiliki breakatau continuemenerapkan ke pernyataan itu daripada pernyataan yang paling langsung (seperti yang tidak berlabel breakatau continuetidak) sangat berguna dalam kasus di mana loop bersarang akan membutuhkan lebih banyak kode dan kode yang lebih kompleks untuk mencapai hal yang sama benda. Saya telah menemukan bahwa saya sering dapat mendesain ulang struktur data dan kode saya untuk menghindari situasi seperti itu, tetapi ini tidak selalu praktis.

Sumber daya bagus lainnya yang terkait dengan penggunaan fungsionalitas mirip goto di Java adalah Pernyataan Goto Tip Tek JDC 13 Juni 2000 dan Pemrograman Java. Seperti yang ditunjukkan tip ini, label sebenarnya dapat digunakan untuk blok apa pun dan tidak terbatas pada breakdan continue. Namun, menurut pengalaman saya, perlunya pendekatan ini di luar breakdan continuejauh lebih jarang.

Satu pengamatan penting tentang label adalah bahwa eksekusi kode tidak secara harfiah kembali ke label itu ketika break somelabeldieksekusi. Alih-alih, aliran eksekusi menuju ke pernyataan segera setelah pernyataan berlabel. Misalnya, jika saya memiliki forloop luar yang disebut "dustin:", maka pemutusan ke itu akan benar-benar masuk ke pernyataan eksekusi pertama setelah akhir forloop berlabel itu . Dengan kata lain, ini bertindak lebih seperti perintah "goto pernyataan setelah pernyataan berlabel".

Saya tidak memberikan contoh penggunaan pernyataan breakberlabel atau berlabel ini di continuesini karena ada banyak contoh bagus yang mudah ditemukan secara online. Secara khusus, dua sumber daya yang telah saya sebutkan (Pernyataan Bercabang Tutorial Java dan Pernyataan Goto dan Tip Teknis Pemrograman Java) mencakup contoh ilustrasi sederhana.

Semakin saya bekerja di industri pengembangan perangkat lunak, saya semakin yakin bahwa hanya ada sedikit hal yang absolut dalam pengembangan perangkat lunak dan bahwa posisi ekstremis hampir selalu salah pada satu hal atau hal lain. Saya biasanya menghindar dari penggunaan kode goto atau goto, tetapi ada kalanya itu adalah kode terbaik untuk pekerjaan itu. Meskipun Java tidak memiliki dukungan goto langsung, ia memberikan dukungan seperti goto yang memenuhi sebagian besar kebutuhan saya yang relatif jarang untuk dukungan tersebut.

Cerita ini, "Java's Goto", awalnya diterbitkan oleh JavaWorld.