Dalam sebuah buku teks yang telah saya cari kelasnya, dinyatakan, sebuah pernyataan bisa kosong (pernyataan nol). Pernyataan nol didefinisikan hanya sebagai tanda titik koma.
Sama sekali tidak melakukan apa pun pada waktu eksekusi. Pernyataan nol jarang digunakan.
Sebagai seorang programmer yang cukup berpengalaman, saya merasa menarik bahwa mereka mengatakan jarang digunakan, apakah ini menyiratkan bahwa di suatu tempat, ada gunanya.
Apa yang bisa menjadi penggunaan pernyataan seperti itu?
Anda dapat menggunakannya saat pernyataan secara sintaksis diperlukan tetapi tidak secara semantik diperlukan. Kasus yang paling umum adalah menghilangkan salah satu bagian dari for for, seperti contoh ini , meskipun kebanyakan orang merasa penggunaan itu aneh dan sulit dibaca. Seperti yang dikatakan buku Anda, ini jarang digunakan.
sumber
while ( sleepPoll(device, 1000, TimeUnit.MILLISECONDS) ) { ; }
semua pada baris yang berbeda, tentu saja. Saya bisa saja menulisnyawhile ( true ) { if ( ! sleepPoll(device, 1000, TimeUnit.MILLISECONDS) ) { break; } }
, tapi itu salah.void method(){ //code here. If(condition){return ;}}
.Saya lebih suka menggunakan loop sementara , tetapi ekspresi nol memungkinkan Anda menulis ini:
Namun, pernyataan nol memungkinkan Anda menulis ini:
Tujuan utamanya adalah membuang-buang waktu programmer pemeliharaan yang buruk yang datang setelah Anda dan bertanya-tanya mengapa utas tidak berjalan. Pernyataan harus mengikuti beberapa saat. Seorang diri; adalah sebuah pernyataan. Jadi blok pernyataan ini sebenarnya bukan bagian dari loop.
Itu tidak berarti tidak ada gunanya. Mereka jarang. Mereka biasanya terlihat seperti ini:
Karena dengan cara ini sepertinya Anda bermaksud melakukan itu (bahkan ini terkadang tidak cukup).
Dalam perakitan pernyataan nol ini disebut NOP . Dalam Python disebut pass . Dalam java (dan anak-anak lain dari c) itu adalah titik koma seperti yang Anda katakan, atau bahkan menyatakan benar;
Saya tahu beberapa kegunaan:
Semantik .
Ada perbedaan antara ruang kosong dan meletakkan nol di bawah sebagai jawaban. Jelas dikatakan, tidak, saya tidak lupa untuk meletakkan sesuatu di sini. Tidak ada yang dimaksudkan sebagai apa-apa. Tidak ada yang eksplisit. Ruang ini sengaja dikosongkan. Ini adalah bagaimana kami mendapatkan N / A untuk dikompilasi.
Pola nol
Bayangkan sebuah mesin pemberi sinyal cahaya yang rumit dan mahal yang berulang kali mengambil bola lampu berwarna dari sabuk konveyor, memasukkannya ke dalam soket, menyalakannya, melepasnya, dan mengambil yang berikutnya. Anda dapat mengontrol apa yang ditandai oleh warna lampu yang Anda pasang di sabuk. Hebat, sekarang akhirnya bekerja dengan sempurna, atasan Anda ingin Anda menciptakan cara untuk mengontrol waktu sinyal-sinyal ini. Dia ingin menambahkan celah di antara pesan-pesan. Anda ingat dengan ngeri bahwa banyak bagian peduli tentang waktu sinyal-sinyal ini dan betapa menyebalkannya untuk menyinkronkannya. Bagaimana Anda akan mengendalikan waktu tanpa ini membuat Anda bekerja selama akhir pekan? Anda melihat ke tempat sampah yang terbakar dan mendapatkan ide yang cemerlang.
Terkadang Anda ingin menggunakan polimorfisme untuk mematikan sesuatu tanpa merusak apa pun.
Debugging
Ketika Anda menetapkan breakpoint, Anda perlu ada tempat untuk breakpoint. Sekarang yakin beberapa debugger akan membiarkan Anda mengaturnya pada kurung kurawal penutupan tetapi jika mereka tidak senang bahasanya memungkinkan Anda memaksa ada tempat untuk meletakkan satu bahkan jika tempat itu tidak melakukan apa-apa.
Bukan benar-benar java tetapi ada juga:
Mengotak-atik biner
Instruksi Assemblies NOP memungkinkan mengutak-atik file biner yang dapat dieksekusi. Tapi kompiler java modern mengoptimalkan begitu jauh saya tidak yakin titik koma tidak hanya pergi poof. Tetapi di masa lalu kita juga menggunakan titik-titik kosong ini di executable untuk mengontrol waktu atau memungkinkan kita untuk menyerah. Tanpa NOP akan ada instruksi yang sebenarnya di sana, jadi jika Anda ingin menghubungkan Anda harus menyalin petunjuk itu di tempat lain untuk memberikan ruang bagi kait. Ini berfungsi dengan baik dalam bahasa c dari mana Java mendapatkan banyak sintaksisnya. Tapi saya tidak berpikir pengait ini banyak terjadi di Jawa. Kami menggunakan Pemrograman Berorientasi Aspek untuk melakukan itu.
sumber
for
bukan pernyataan nol. Pernyataan kosong (alias pernyataan kosong) dapat terjadi di tempat yang sama dengan pernyataan lain (seperti anif
) dapat terjadi, tetapi tanda kurung berikutfor
ini tidak mengizinkan pernyataan di antara titik koma, tetapi hanya inisialisasi dan dua ekspresi, yang merupakan opsional. Jadi itu adalah penggunaan yang berbeda dari titik koma sebagai terminator-terminator. Pernyataan kosong akan menjadi titik koma terakhir difor(;;);
Saya menggunakannya karena Java dirancang sedemikian rupa sehingga tidak kongruen dengan bahasa manusia. Hal yang sama berlaku untuk C.
Pernyataan adalah
statement;
.Pernyataan if-then-else adalah
if (condition) statement; else statement;
Pernyataan if-then-else dengan blok majemuk adalah
if (condition) {statements} else {statements}
Ini jelas omong kosong.
Saya menulis
if (condition) {statements} else {statements};
yang logis dan masuk akal.Jika desainer Jawa ingin memperlakukan ini seolah-olah-lain diikuti oleh pernyataan nol, saya setuju dengan itu. Jika itu membuat mereka bahagia, biarkan itu membuat mereka bahagia.
sumber
if (condition) {statements;} else {statements;}
. Juga, Java cukup konsisten tentang tidak perlu;
setelah}
. Seperti bagaimana bahasa manusia tidak sering menempel pada akhir kalimat yang sudah diakhiri dengan tanda tanya. (Tentu, ada akhir!?
atau?!
akhir, tapi itu hanya perkiraan‽
, karakter interrobang .)