Saya bingung tentang ini. Sebagian besar dari kita telah diberitahu bahwa tidak ada pernyataan goto di Jawa.
Tetapi saya menemukan bahwa itu adalah salah satu kata kunci di Jawa. Di mana bisa digunakan? Jika tidak dapat digunakan, lalu mengapa itu dimasukkan di Jawa sebagai kata kunci?
Jawaban:
Daftar kata kunci Java menentukan
goto
kata kunci, tetapi ditandai sebagai "tidak digunakan".Itu di JVM asli (lihat jawaban oleh @VitaliiFedorenko ), tetapi kemudian dihapus. Itu mungkin disimpan sebagai kata kunci yang dicadangkan jika itu akan ditambahkan ke versi Java yang lebih baru.
Jika
goto
tidak ada dalam daftar, dan itu akan ditambahkan ke bahasa nanti, kode yang ada yang menggunakan katagoto
sebagai pengidentifikasi (nama variabel, nama metode, dll ...) akan rusak. Tetapi karenagoto
merupakan kata kunci, kode tersebut bahkan tidak dapat dikompilasi di masa sekarang, dan tetap memungkinkan untuk membuatnya benar-benar melakukan sesuatu di kemudian hari, tanpa melanggar kode yang ada.sumber
This was probably done in case it were to be added to a later version of Java.
Sebenarnya, alasan utamanya sedikit berbeda (lihat jawaban saya di bawah)James Gosling menciptakan JVM asli dengan dukungan
goto
pernyataan, tetapi kemudian ia menghapus fitur ini sebagai tidak perlu. Alasan utamagoto
yang tidak perlu adalah bahwa biasanya dapat diganti dengan pernyataan yang lebih mudah dibaca (sepertibreak/continue
) atau dengan mengekstraksi sepotong kode ke dalam metode.Sumber: James Gosling, sesi tanya jawab
sumber
goto
adalah cara yang paling siap dan jelas untuk mengekspresikan sesuatu, jadi memaksanya ke hal lain menjadi kurang mudah dibaca .Kata kunci ada, tetapi tidak diterapkan.
Satu-satunya alasan bagus untuk menggunakan goto yang dapat saya pikirkan adalah ini:
Di Jawa Anda dapat melakukan ini seperti ini:
sumber
break loops
berarti "keluar dari loop yang disebutloops
". Mungkin dalam retrospeksi nama yang lebih baik untuk label mungkinouter
.while (true) {
...}
berlebihan. GOTO sering distigmatisasi karena penggunaannya yang tidak tepat, tetapi saya berpendapat bahwa perbandingan yang tidak perlu dengan literal boolean lebih buruk daripada GOTO.continue LABEL;
pernyataan. Dengan demikian Anda dapat melanjutkan lingkaran berbaring luar.http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
sumber
Jadi mereka bisa digunakan suatu hari jika perancang bahasa merasa perlu.
Juga, jika programmer dari bahasa yang memiliki kata kunci ini (mis. C, C ++) menggunakannya secara tidak sengaja, maka kompiler Java dapat memberikan pesan kesalahan yang berguna.
Atau mungkin itu hanya untuk menghentikan programmer menggunakan goto :)
sumber
goto
danconst
mencerminkan warisan C / C ++ tetapi mereka tetap tidak diterapkan (meskipun ada perdebatan tentang penerapan yang terakhir). Pasangan lebih sukaassert
danenum
awalnya tidak dicadangkan, tetapi mungkin seharusnya, mengingat mereka telah diterapkan. Tapi melihat ke belakang adalah hal yang luar biasa.Mereka dicadangkan untuk penggunaan di masa mendatang (lihat: Kata Kunci Bahasa Jawa )
Alasan mengapa tidak ada pernyataan goto di Jawa dapat ditemukan di " Lingkungan Bahasa Jawa ":
sumber
goto
dicadangkan, tetapi tidak untuk digunakan di masa depan.Contoh cara menggunakan label "terus" di Jawa adalah:
Hasil:
sumber
Penting untuk dipahami bahwa
goto
konstruk tersebut merupakan sisa dari hari-hari yang diprogram oleh programmer dalam kode mesin dan bahasa rakitan. Karena bahasa-bahasa itu sangat mendasar (seperti dalam, setiap instruksi hanya melakukan satu hal), aliran kontrol program dilakukan sepenuhnya dengangoto
pernyataan (tetapi dalam bahasa assembly, ini disebut sebagai instruksi lompat atau cabang ).Sekarang, meskipun bahasa C adalah level yang cukup rendah, ia dapat dianggap sebagai bahasa assembly tingkat sangat tinggi - setiap pernyataan dan fungsi dalam C dapat dengan mudah dipecah menjadi instruksi bahasa assembly. Meskipun C bukan bahasa utama untuk memprogram komputer dengan saat ini, masih banyak digunakan dalam aplikasi tingkat rendah, seperti sistem embedded. Karena fungsi C sangat dekat dengan fungsi bahasa assembly, maka masuk akal jika
goto
dimasukkan dalam C.Jelas bahwa Java adalah evolusi C / C ++. Java berbagi banyak fitur dari C, tetapi abstrak lebih banyak detailnya, dan karenanya ditulis secara berbeda. Java adalah bahasa tingkat sangat tinggi, jadi tidak perlu memiliki fitur tingkat rendah seperti
goto
ketika lebih banyak konstruksi tingkat tinggi seperti fungsi, untuk, untuk masing-masing, dan sementara loop melakukan aliran kontrol program. Bayangkan jika Anda berada dalam satu fungsi dan melakukangoto
label ke fungsi lain. Apa yang akan terjadi ketika fungsi lainnya kembali? Gagasan ini tidak masuk akal.Ini tidak selalu menjawab mengapa Java menyertakan
goto
pernyataan itu tetapi tidak akan membiarkannya dikompilasi, tetapi penting untuk mengetahui mengapagoto
pernah digunakan di tempat pertama, dalam aplikasi tingkat rendah, dan mengapa itu tidak masuk akal untuk menjadi digunakan di Jawa.sumber
Tidak,
goto
tidak digunakan, tetapi Anda dapat mendefinisikan label dan membiarkan perulangan ke label. Anda dapat menggunakanbreak
ataucontinue
mengikuti label. Jadi Anda bisa melompat lebih dari satu level loop. Lihat tutorialnya .sumber
Tidak, untungnya, tidak ada
goto
di Jawa.Kata
goto
kunci hanya disediakan, tetapi tidak digunakan (berlaku untukconst
).sumber
Karena tidak didukung dan mengapa Anda ingin
goto
kata kunci yang tidak melakukan apa pun atau variabel bernamagoto
?Meskipun Anda dapat menggunakan
break label;
dancontinue label;
pernyataan untuk secara efektif melakukan apa yanggoto
dilakukan. Tapi saya tidak akan merekomendasikannya.sumber
The keywords const and goto are reserved, even though they are not currently used. This may allow a Java compiler to produce better error messages if these C++ keywords incorrectly appear in programs.
Ini berarti "Kami tidak menggunakannya, jadi jika Anda berasal dari latar belakang C ++ kami tidak akan membiarkan Anda menggunakannya sama sekali.". 2)goto
adalah nama metode yang mengerikan. Maaf. 3) istirahat dan lanjutkan disarankan, tetapi tidak dengan cara yang digunakan di sini . 4) "kemungkinan besar" [rujukan?].Tidak,
goto
tidak digunakan di Jawa, meskipun kata yang dilindungi undang-undang. Hal yang sama berlaku untukconst
. Keduanya digunakan dalam C ++, yang mungkin merupakan alasan mengapa mereka dicadangkan; maksudnya mungkin untuk menghindari programmer C ++ yang bingung bermigrasi ke Jawa, dan mungkin juga untuk mempertahankan pilihan untuk menggunakannya di revisi Java yang lebih baru.sumber
goto
tidak didukung dalam waktu dekat setidaknya;)Perhatikan bahwa Anda dapat mengganti sebagian besar penggunaan jinak oleh
kembali
istirahat
label istirahat
lempar ke dalam coba-tangkap-akhirnya
sumber
return
Seperti yang ditunjukkan, tidak ada
goto
di Jawa, tetapi kata kunci dicadangkan jika Sun ingin menambahkangoto
ke Jawa suatu hari. Mereka ingin dapat menambahkannya tanpa melanggar terlalu banyak kode, jadi mereka memesan kata kunci. Perhatikan bahwa dengan Java 5 mereka menambahkanenum
kata kunci dan tidak merusak kode sebanyak itu.Meskipun Java tidak memiliki
goto
, ia memiliki beberapa konstruksi yang sesuai dengan beberapa penggunaangoto
, yaitu mampubreak
dancontinue
dengan loop bernama. Juga,finally
dapat dianggap sebagai semacam bengkokgoto
.sumber
Untuk melarang deklarasi variabel dengan nama yang sama.
misalnya
int i = 0, goto;
sumber
Ini sangat dianggap sebagai salah satu hal yang Tidak Anda Lakukan, tetapi mungkin terdaftar sebagai kata yang dilindungi undang-undang untuk menghindari kebingungan bagi pengembang.
sumber
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.goto
Jika Anda telah diberitahu bahwa tidak ada pernyataan goto di Jawa Anda telah tertipu. Memang, Java terdiri dari dua lapisan kode 'sumber'.
sumber
Lihat tautan berikut ini menunjukkan semua kata yang dilindungi undang-undang dan memberi tahu Anda versi apa yang ditambahkan.
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
goto dicadangkan, meskipun saat ini tidak digunakan, tidak pernah mengatakan tidak pernah :)
sumber
Saya juga bukan penggemar
goto
, karena biasanya membuat kode lebih mudah dibaca. Namun saya percaya bahwa ada pengecualian untuk aturan itu (terutama ketika menyangkut lexers dan parser!)Tentu saja Anda selalu dapat membawa program Anda ke Kleene Normalform dengan menerjemahkannya menjadi sesuatu yang seperti assembler dan kemudian menulis sesuatu seperti
(Jadi Anda pada dasarnya menulis VM yang mengeksekusi kode biner Anda ... di mana
line
sesuai dengan pointer instruksi)Itu jauh lebih mudah dibaca daripada kode yang digunakan
goto
, bukan?sumber
Tentu saja itu kata kunci, tetapi tidak digunakan pada level kode sumber.
Tetapi jika Anda menggunakan jasmin atau bahasa tingkat rendah lainnya, yang diubah menjadi bytecode, maka "goto" ada
sumber
Karena meskipun bahasa Java tidak menggunakannya, bytecode JVM melakukannya.
sumber
load
kata kunci?goto tidak ada di Jawa
Anda harus menggunakan GOTO Tapi itu tidak berfungsi dengan benar. di kata kunci java itu tidak digunakan. http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
sumber