Ada manfaat untuk masing-masing dan saya mengerti perbedaannya, tetapi apa yang dianggap praktik terbaik / standar? Dan mengapa?
Sebagai contoh :
"myString".equals(myStringVar)
- Menghindari NPE potensial dan tidak memerlukan pemeriksaan nol. (Hal baik?)
- Lebih bersih untuk dibaca karena tidak diperlukan cek nol.
- Jika nol bukan nilai yang diharapkan, program Anda bisa rusak tanpa menjadi lebih bijak.
Namun
myStringVar.equals("myString")
- Memerlukan pemeriksaan nol jika nol adalah nilai yang diharapkan. (Hal baik?)
- Dapat mengacaukan kondisional majemuk dengan cek nol.
- Mengizinkan NPE memberi tahu kami jika ada sesuatu yang rusak.
Variasi mana yang dianggap sebagai standar yang digunakan untuk Java, dan mengapa?
java
programming-practices
coding-standards
BrandonV
sumber
sumber
Jawaban:
Saya menduga bahwa ini berasal dari tindakan pencegahan keamanan yang digunakan saat pemrograman dalam C yang lebih tua (atau C ++). Di C, Anda bisa secara tidak sengaja memberikan nilai saat Anda bermaksud menguji kesetaraan:
Kondisi ini akan selalu benar, karena tugasnya nilai xa 3, tidak menguji bahwa x sama dengan 3. Untuk menghindari bug halus ini, pengembang mulai membalikkan kondisi:
Ini mengandung "bug" yang sama, tetapi akan menghasilkan kesalahan kompiler, jadi lebih aman.
Lebih banyak bahasa modern tidak memiliki masalah ini, dan mereka dapat dengan mudah memperingatkan Anda ketika Anda mencoba melakukan hal-hal semacam ini. Karena itu, tidak ada preferensi murni, jadi pilih satu, dan gunakan secara konsisten.
sumber
equals
. Tidak seperti di C, masalah untuk Java adalah bahwa ekspresix.equals(y)
akan melempar NPE ketikax
nol. Jika Anda memiliki String literal"something"
dan Anda ingin menganggap casenull
sebagai "not equals", masuk akal untuk menulis"something".equals(y)
jika Anda tidak tahu apakahy
bisa nol. Ini tidak akan pernah menghasilkan NPE.Standar dan praktik yang baik akan berbeda dengan budaya organisasi tempat Anda bekerja
Standar kami dalam. NET adalah
myStringVar == "myString"
hanya karena kami telah menyetujuinya, yaitu kami yakin itu bersih dan mudah digunakanCatatan: Ini tidak berlaku untuk Java karena
==
membandingkan referensi, bukan objek itu sendiri. Di Jawa Anda harus menggunakanmyStringVar.equals("myString")
.sumber
==
karena hanya membandingkan referensi objek. Yang mengatakan, +1 untuk setimen - konvensi sering mendefinisikan cara yang "benar" dalam melakukan sesuatu.myStringVar == "myString"
adalah ide yang sangat buruk di Jawa (kecuali jika Anda benar-benar yakinmyStringVar
diinternir).Saya pikir Anda benar dalam hal itu tergantung pada semantic nullness dari variabel. Jika Anda tidak mengharapkannya menjadi nol dan tidak perlu memeriksa dan menanganinya maka bentuk pertama adalah bersih.
Yang mengatakan, daripada menanamkan string literal, opsi yang lebih baik mungkin adalah ini:
Terutama jika ada potensi untuk menggunakan string di lebih dari satu.
sumber