1. Ikhtisar
Ada kunci penegasan dalam bahasa C dan C++ yang artinya penegasan.
Di Java juga ada kata kunci Assert yang artinya penegasan.
2. Tata Bahasa
Di Java, kata kunci menegaskan diperkenalkan dari JAVA SE 1.4. Untuk menghindari kesalahan yang disebabkan oleh penggunaan kata kunci menegaskan dalam kode Java versi lama, Java tidak mengaktifkan pemeriksaan pernyataan secara default saat dijalankan (saat ini, semua pernyataan Pernyataan akan diabaikan!), jika Anda ingin mengaktifkan pemeriksaan pernyataan, Anda perlu mengaktifkannya dengan sakelar -enableassertions atau -ea.
Sintaks kata kunci menegaskan sangat sederhana dan memiliki dua kegunaan:
1. menegaskan <ekspresi boolean>
Jika <boolean ekspresi> benar, eksekusi program dilanjutkan.
Jika salah, program akan memunculkan AssertionError dan menghentikan eksekusi.
2. menegaskan <ekspresi boolean>: <ekspresi pesan kesalahan>
Jika <boolean ekspresi> benar, eksekusi program dilanjutkan.
Jika salah, program akan menampilkan java.lang.AssertionError dan memasukkan <ekspresi pesan kesalahan>.
3. Contoh penerapan
Sebuah contoh diberikan di bawah ini untuk menggambarkan penggunaannya:
Copy kode kodenya sebagai berikut:
kelas publik AssertFoo {
public static void main(String args[]) {
//Hasil pernyataan 1 benar, lalu lanjutkan eksekusi.
menyatakan benar;
System.out.println("Tidak ada masalah dengan pernyataan 1, Lanjutkan!");
System.out.println("/n---/n");
//Hasil dari pernyataan 2 salah dan program berakhir
menegaskan salah : "Pernyataan gagal, informasi dari ekspresi ini akan dikeluarkan ketika pengecualian dilemparkan!";
System.out.println("Tidak ada masalah dengan pernyataan 2, Lanjutkan!");
}
}
Simpan kode ke C:/AssertFoo.java, lalu jalankan sebagai berikut dan lihat keluaran konsol:
1. Kompilasi program:
C:/>javac AssertFoo.java
2. Program dijalankan secara default tanpa menyalakan tombol -ea:
C:/>java AssertFoo
Pernyataan 1 baik-baik saja, Ayo!
------------------------------
Pernyataan 2 tidak masalah, Ayo!
3. Hidupkan sakelar -ea dan jalankan program:
C:/>java -ea AssertFoo
Pernyataan 1 baik-baik saja, Ayo!
------------------------------
Pengecualian di thread "utama" java.lang.AssertionError: Pernyataan gagal, informasi dari ekspresi ini akan
Akan menjadi output ketika pengecualian dilempar!
di AssertFoo.main(AssertFoo.java:10)
4. Perangkap
Kata kunci menegaskan mudah digunakan, namun menggunakan pernyataan akan sering membuat Anda jatuh ke dalam perangkap yang semakin dalam. Harus dihindari. Setelah dilakukan penelitian, penulis merangkum alasannya sebagai berikut:
1. Kata kunci menegaskan harus diaktifkan secara eksplisit pada waktu proses agar dapat diterapkan, jika tidak, pernyataan Anda tidak akan ada artinya. Saat ini, alat IDE Java mainstream tidak mengaktifkan fungsi pemeriksaan pernyataan -ea secara default. Artinya, jika Anda menggunakan alat IDE untuk membuat kode, Anda akan mengalami masalah saat melakukan debug dan menjalankannya. Selain itu, untuk aplikasi Web Java, kode program disebarkan dalam wadah, dan Anda tidak dapat secara langsung mengontrol jalannya program. Jika Anda harus mengaktifkan sakelar -ea, Anda perlu mengubah parameter konfigurasi wadah Web yang sedang berjalan. Hal ini membawa ketidaknyamanan besar pada transplantasi dan penerapan program.
2. Menggunakan pernyataan alih-alih if adalah jebakan kedua. Penilaian dari pernyataan tegas mirip dengan pernyataan if, tetapi fungsi keduanya pada dasarnya berbeda: kata kunci pernyataan dimaksudkan untuk digunakan saat menguji dan men-debug program, tetapi jika Anda secara tidak sengaja menggunakan pernyataan untuk mengontrol proses bisnis dari pernyataan tersebut. program, itu tidak akan digunakan selama pengujian dan debugging. Menghapus kata kunci tegas setelah selesai berarti mengubah logika normal program.
3. Jika pernyataan penegasan gagal, program akan keluar. Hal ini tidak akan pernah ditoleransi dalam lingkungan produksi. Potensi kesalahan dalam program umumnya diselesaikan melalui penanganan pengecualian. Namun menggunakan pernyataan sangat berbahaya. Sekali gagal, sistem akan hang.
5. Pikiran tentang penegasan
Karena pernyataan ditujukan untuk men-debug program pengujian dan bukan untuk digunakan dalam lingkungan produksi formal, Anda harus mempertimbangkan pengujian JUint yang lebih baik untuk menggantikan fungsinya. Tentu saja, debugging dan pengujian dapat dilakukan melalui debug IDE. Dari sudut pandang ini, masa depan Assert suram.
Oleh karena itu, Anda sebaiknya menghindari penggunaan kata kunci menegaskan di Java, kecuali suatu saat Java mendukung saklar -ea secara default, maka Anda dapat mempertimbangkannya. Bandingkan seberapa besar manfaat dan seberapa besar kesulitan yang dapat Anda berikan kepada Anda. Ini adalah prinsip bagi kami untuk memilih apakah akan menggunakannya.
==================== ==========
komentar:
Di sisi lain, pada beberapa komponen open source, seperti validator dan junit, proses penilaian tampaknya menggunakan gaya pernyataan yang digunakan dalam jumlah besar, tetapi penulis tidak dapat memastikannya sebelum melihatnya kode sumber.
Jika ini adalah tes sederhana selama tahap pengembangan, junit adalah alat yang mudah digunakan dan ampuh. Tidak ada alasan untuk tidak menggunakannya saat menulis pernyataan Anda sendiri.
==================== ==========
komentar:
Pertama dapat digunakan dalam kode pengujian unit. Junit sangat mengganggu. Jika sejumlah besar kode di seluruh proyek menggunakan Junit, akan sulit untuk menghapusnya atau memilih framework lain. Jika ada banyak kode pengujian unit dan Anda ingin menggunakan kembali kasus pengujian unit ini, Anda harus memilih menegaskan daripada junit untuk memfasilitasi penggunaan kerangka pengujian unit lainnya, seperti TestNG. Untuk alasan yang sama, Junit tidak boleh muncul dalam kode fungsional formal sama sekali, dan pernyataan harus digunakan.
menegaskan terutama cocok untuk kelas dasar, kelas kerangka kerja, kelas antarmuka, kelas kode inti, dan kelas alat. Dengan kata lain, ini perlu digunakan ketika pemanggil kode Anda adalah kode bisnis yang ditulis oleh pemrogram lain, atau subsistem lain. Misalnya jika Anda membuat algoritma pengurutan cepat
Copy kode kodenya sebagai berikut:
Daftar statis publik<int> quickSort(Daftar<int> daftar){
tegaskan daftar != null;
//Mendaftar untuk ruang sementara
//Mulai menyortir
untuk(int i : daftar){
//
}
}
Dalam hal ini, jika kebenaran parameter masuk tidak diperiksa, kesalahan penunjuk nol yang tidak dapat dijelaskan akan muncul. Penelepon Anda mungkin tidak mengetahui detail kode Anda, dan men-debug kesalahan penunjuk nol jauh di dalam sistem hanya membuang-buang waktu. Anda harus secara langsung dan jelas memberi tahu penelepon Anda bahwa ada masalah dengan parameter yang dimasukkan. Jika tidak, dia akan mencurigai kode Anda memiliki BUG. Menggunakan menegaskan dapat mencegah dua programmer saling menyalahkan atas masalah dengan kode yang mereka tulis.
pernyataan berlaku untuk kesalahan yang Anda tahu persis apa kesalahannya, dan Anda serta penelepon Anda telah sepakat bahwa penelepon Anda harus menghilangkan atau memeriksa kesalahan. Anda memberi tahu penelepon Anda melalui pernyataan. menegaskan tidak berlaku untuk kesalahan yang disebabkan oleh sistem eksternal, seperti kesalahan pada data input pengguna atau kesalahan format pada file eksternal. Kesalahan ini bukan disebabkan oleh penelepon Anda, melainkan oleh pengguna, dan bahkan bukan merupakan pengecualian, karena kesalahan input dan kesalahan format file sering terjadi, dan kesalahan ini harus diperiksa dengan kode bisnis.
menegaskan lebih cocok untuk kelas dasar yang sering disebut, kode kerangka kerja, kelas alat, kode inti, dan kode antarmuka. Inilah sebabnya mengapa ini dihapus saat runtime. Kode pengujian harus mengaktifkan parameter -ea selama fase pengujian untuk memfasilitasi pengujian yang cermat terhadap kode inti jauh di dalam sistem.
Alasan mengapa Java lebih jarang menggunakan pernyataan adalah karena Java memiliki sistem OO yang sangat lengkap dan konversi tipe paksa lebih jarang terjadi, sehingga tidak perlu sering-sering memeriksa apakah tipe pointer sudah benar dan apakah pointer kosong seperti C. Pada saat yang sama, Java jarang mengelola memori atau buffer secara langsung, sehingga tidak perlu sering-sering memeriksa apakah buffer yang masuk kosong atau sudah melewati batas.
Namun menggunakan pernyataan dengan baik dapat membantu meningkatkan kebenaran kode kerangka kerja dan mengurangi waktu debugging pengguna kode kerangka kerja.
==================== =============
komentar:
Tujuan dari penegasan adalah untuk memungkinkan pemrogram menemukan kesalahan logikanya sendiri dengan mudah tanpa mempengaruhi efisiensi program. Kesalahan yang ditemukan oleh penegasan tidak boleh terjadi sama sekali dan tidak dapat digantikan dengan pengecualian. Pengecualian diperbolehkan oleh sistem, atau merupakan "kesalahan" yang tidak dapat dikendalikan oleh sistem. Ini bukan masalah logis pemrogram.
menegaskan harus diaktifkan selama pengembangan dan dimatikan setelah rilis.