- Panggilan metode atau fungsi yang tidak ada artinya.
Belum tentu buruk. Metode dalam kelas dasar sering memanggil metode kosong yang dimaksudkan sebagai titik override untuk subclass. Contoh: UIView Cocoa Touch memiliki -didAddSubview:
metode yang didokumentasikan sebagai tidak melakukan apa pun dalam versi default. -addSubview:
Metode UIView harus memanggil -didAddSubview:
meskipun tidak melakukan apa-apa karena subclass dapat mengimplementasikannya untuk melakukan sesuatu. Metode yang tidak melakukan apa-apa dan alasannya harus didokumentasikan, tentu saja.
Jika fungsi / metode yang kosong atau tidak berguna jelas ada karena alasan historis, maka metode tersebut harus dikeluarkan. Lihatlah versi kode yang lebih lama di repositori kode sumber Anda jika Anda tidak yakin.
- Pemeriksaan berlebihan dilakukan dalam file, objek, atau metode kelas terpisah.
Sulit dikatakan kalau tidak apa-apa tanpa konteks. Jika cek jelas dilakukan untuk alasan yang sama, itu mungkin berarti bahwa tidak ada pemisahan tanggung jawab yang jelas dan beberapa refactoring diperlukan, terutama ketika kedua cek menghasilkan tindakan yang sama diambil. Jika tindakan yang dihasilkan dari kedua pemeriksaan tidak sama, maka kedua pemeriksaan tersebut mungkin dilakukan untuk alasan yang berbeda bahkan jika kondisinya sama, dan itu mungkin baik-baik saja.
- jika pernyataan itu selalu dievaluasi benar.
Ada perbedaan besar antara:
if (1) {
// ...
}
dan:
if (foo() == true) {
// ...
}
dimana foo()
kebetulan selalu kembali true
.
Kasus pertama sering terjadi ketika orang sedang melakukan debugging. Sangat mudah untuk menggunakan if (0) {...
untuk menghapus serangkaian kode sementara saat Anda sedang mencoba untuk mengisolasi bug, dan kemudian mengubah 0
untuk 1
mengembalikan kode tersebut. The if
harus dihapus setelah Anda selesai, tentu saja, tapi mudah untuk melupakan langkah itu, atau kehilangan satu atau dua jika Anda sudah melakukannya di beberapa tempat. (Adalah ide bagus untuk mengidentifikasi persyaratan seperti itu dengan komentar yang nantinya bisa Anda cari.) Satu-satunya bahaya adalah kebingungan yang mungkin ditimbulkannya di masa depan; jika kompilator dapat menentukan nilai kondisi pada waktu kompilasi, itu akan menghapus seluruhnya.
Kasus kedua bisa diterima. Jika kondisi yang diwakili oleh foo()
perlu diuji dari beberapa tempat dalam kode, memasukkannya ke dalam fungsi atau metode terpisah sering kali merupakan hal yang benar untuk dilakukan walaupun foo()
selalu benar pada saat ini. Jika foo()
mungkin akhirnya akan kembali false
, mengisolasi kondisi itu dalam metode atau fungsi adalah salah satu cara untuk mengidentifikasi semua tempat di mana kode bergantung pada kondisi itu. Namun , melakukan hal itu menimbulkan risiko bahwa foo() == false
kondisi tersebut tidak akan diuji dan dapat menyebabkan masalah di kemudian hari; solusinya adalah memastikan bahwa Anda menambahkan unit test yang secara eksplisit menguji false
case.
- Utas yang berputar dan tidak mencatat.
Ini terdengar seperti artefak sejarah, dan sesuatu yang dapat diidentifikasi baik selama tinjauan kode atau melalui profil periodik dari perangkat lunak. Saya kira itu bisa dibuat dengan sengaja, tetapi saya kesulitan membayangkan bahwa seseorang akan melakukan itu dengan sengaja.
if (false) {...}
blok sangat bagus untuk mengomentari kode! </