Bagaimana Anda menggunakan bebek mengetik dalam javascript tanpa selalu memeriksa properti dan metode?
Sederhana: jangan selalu memeriksa properti dan metode.
Di Ruby, apa yang Anda panggil disebut "mengetik ayam". Dalam bahasa yang diketik secara dinamis, Anda hanya percaya bahwa penelepon memberikan Anda objek yang cocok. Adalah tugas si penelepon untuk menghormati sisi kontraknya.
Saya tahu javascript menggunakan mengetik bebek dan pada awalnya saya pikir ini akan membuat polimorfisme mudah dibandingkan dengan bahasa yang sangat diketik seperti C #.
Anda membingungkan banyak poros ortogonal untuk mengetik di sini. Ada empat sumbu ortogonal untuk mengetik:
- Kapan : pengetikan dinamis (tipe tidak diketahui dan diperiksa sampai runtime) vs. pengetikan statis (tipe diketahui dan diperiksa sebelum runtime)
- Apa : pengetikan bebek (tipe berdasarkan perilaku ), pengetikan struktural (tipe berdasarkan pada struktur ), dan pengetikan nominal (tipe berdasarkan nama )
- Bisakah kamu melihat mereka? pengetikan eksplisit (tipe harus dianotasi secara eksplisit) vs. pengetikan implisit (tipe disimpulkan)
- pengetikan kuat vs pengetikan lemah - Anda mungkin telah memperhatikan bahwa saya tidak memberikan judul yang menarik atau penjelasan dalam tanda kurung, itu karena tidak seperti tujuh istilah di atas, yang masing-masing memiliki satu definisi akurat yang diterima secara universal, kedua istilah ini memiliki sekitar selusin definisi samar semi-banyak digunakan yang saling bertentangan; idealnya Anda harus menghindari istilah-istilah ini sama sekali, dan jika Anda harus menggunakannya, tentukan dengan tepat terlebih dahulu
Karena Anda menyebutkan C #: sebagian besar diketik secara statis, tetapi mendukung pengetikan dinamis melalui jenis dynamic
itu, sebagian besar diketik secara nominal, tetapi tipe anonim menggunakan pengetikan struktural, dan pola sintaksis (seperti sintaksis pemahaman kueri LINQ) dapat diperdebatkan sebagai bebek -typed atau diketik secara struktural, sebagian besar diketik secara eksplisit tetapi mendukung pengetikan implisit untuk argumen tipe umum dan variabel lokal (walaupun case variabel lokal agak aneh dibandingkan dengan kebanyakan bahasa lain, karena Anda tidak bisa meninggalkan tipenya saja, Anda harus berikan tipe pseudo eksplisitvar
, dengan kata lain, jika Anda menginginkan tipe implisit, Anda harus mengatakannya secara eksplisit). Apakah C # diketik dengan kuat atau lemah adalah masalah definisi dua istilah yang Anda gunakan, bagaimanapun, perhatikan bahwa mungkin ada banyak kesalahan tipe runtime di C #, terutama karena kovarians array yang tidak aman.
Saya tahu saya tidak bisa memeriksa, tetapi melacak kesalahan waktu javascript dapat menjadi mimpi buruk karena tidak selalu terjadi di mana kesalahan sebenarnya terjadi dalam kode.
Debugging bukanlah keterampilan yang mudah dipelajari. Namun, ada teknik untuk memudahkan debugging, misalnya Saff Squeeze adalah teknik yang dijelaskan oleh Kent Beck yang menggunakan tes dan refactoring untuk debugging:
Pengujian Regresi dan Squeeze Saff
Kent Beck, Institut Three Rivers
Abstrak: Untuk mengisolasi cacat secara efektif, mulailah dengan tes tingkat sistem dan secara bertahap sebaris dan pangkas sampai Anda memiliki tes sekecil mungkin yang menunjukkan cacat.