Rekan kerja Anda benar-benar mencoba menerapkan design by contract (DbC) dari bahasa Eiffel dan berdasarkan buku: Object Oriented Software Construction, 2nd Edition.
Penegasan, seperti yang dia gunakan, akan menjadi {P}-bagian dari Hoare Logic atau Hoare Triple: {P} C {Q}, di mana {P} adalah pernyataan prasyarat (ion) s dan {Q} adalah pernyataan pasca-kondisi (ion) s.
Saya akan mengambil catatan kritis dari saran yang diberikan tentang fitur assert di PHP yang memiliki bug. Anda tidak ingin menggunakan kode buggy. Apa yang Anda inginkan adalah pembuat PHP untuk memperbaiki bug di assert. Sampai mereka melakukannya, Anda dapat menggunakan assert, tetapi gunakan dengan memperhatikan status buggy saat ini.
Selain itu, jika fitur assert buggy, saya sarankan Anda tidak menggunakannya dalam kode produksi. Namun demikian, saya menganjurkan agar Anda menggunakannya dalam pengembangan dan pengujian kode jika sesuai.
Terakhir — jika Anda melakukan studi desain demi kontrak, Anda akan menemukan bahwa ada konsekuensi penggunaan pernyataan Boolean dalam kaitannya dengan pewarisan klasik berorientasi objek — yaitu — Anda tidak boleh melemahkan prasyarat, atau melemahkan pascakondisi. Melakukannya bisa berbahaya bagi objek turunan polimorfik Anda yang berinteraksi satu sama lain. Sampai Anda memahami apa artinya — saya akan membiarkannya!
Selain itu — saya sangat menyarankan agar pembuat PHP melakukan studi komprehensif tentang desain berdasarkan kontrak dan mencoba memasukkannya ke dalam PHP ASAP! Maka kita semua bisa mendapatkan keuntungan dari memiliki kompiler / interpreter yang sadar DbC, yang akan menangani masalah yang disebutkan dalam jawaban (di atas):
- Kompiler design-by-contract-aware yang diimplementasikan dengan benar (mudah-mudahan) akan bebas bug (tidak seperti pernyataan PHP saat ini).
- Kompiler desain-demi-kontrak-sadar yang diimplementasikan dengan benar akan menangani nuansa manajemen logika pernyataan polimorfik untuk Anda alih-alih memeras otak Anda atas masalah ini!
CATATAN: Bahkan penggunaan if
-statement sebagai pengganti assert (precondition) akan mengalami konsekuensi yang mengerikan jika digunakan untuk memperkuat prasyarat atau melemahkan post-condition. Untuk memahami apa artinya, Anda perlu mempelajari desain demi kontrak untuk mengetahuinya! :-)
Selamat belajar dan belajar.
'isset
(baris kode denganassert
)? Bukan hanyaisset
(tanpa kutipan tunggal,'
)?