Ini muncul dalam sebuah diskusi dengan seorang teman, dan saya mendapati diri saya terdesak untuk memikirkan argumen yang bagus. Apa manfaat dari konferensi mengetik yang lemah?
type-systems
type-safety
weak-typing
Fishtoaster
sumber
sumber
Jawaban:
Masalah dengan diskusi semacam ini hanyalah bahwa istilah "pengetikan lemah" dan "pengetikan kuat" tidak ditentukan, tidak seperti misalnya istilah "pengetikan statis", "pengetikan dinamis", "pengetikan eksplisit", "pengetikan eksplisit", "pengetikan implisit", " mengetik bebek "," mengetik struktural "atau" mengetik nominal ". Heck, bahkan istilah "pengetikan manifes" dan "pengetikan laten", yang masih merupakan area penelitian dan diskusi terbuka mungkin lebih baik didefinisikan.
Jadi, sampai teman Anda memberikan definisi dari istilah "pengetikan lemah" yang cukup stabil untuk dijadikan dasar diskusi, bahkan tidak masuk akal untuk menjawab pertanyaan ini.
Sayangnya, terlepas dari jawaban Nick , tidak ada satu pun dari penjawab yang repot-repot memberikan definisi mereka, dan Anda dapat melihat kebingungan yang muncul di beberapa komentar. Sulit dikatakan, karena tidak ada yang benar-benar memberikan definisi mereka, tapi saya pikir saya menghitung setidaknya tiga yang berbeda, hanya di halaman ini.
Beberapa definisi yang lebih umum digunakan adalah (dan ya, saya tahu bahwa tidak ada satu pun dari mereka yang masuk akal, tetapi itulah definisi yang pernah saya lihat digunakan orang):
Tiga definisi yang tampaknya paling banyak digunakan , adalah
Kecuali semua orang setuju pada definisi apa yang "lemah mengetik" bahkan adalah , bahkan tidak masuk akal untuk berpikir tentang apa kelebihan mungkin. Keuntungan apa? Lebih buruk lagi, jika tidak ada definisi sama sekali , maka semua orang bisa menggeser definisi mereka agar sesuai dengan argumen mereka, dan setiap diskusi dijamin cukup banyak untuk berpindah menjadi flamewar.
Saya sendiri telah mengubah definisi saya sendiri beberapa kali selama bertahun-tahun dan sekarang telah mencapai titik di mana saya bahkan tidak menganggap istilah itu berguna lagi. Saya juga terbiasa berpikir bahwa pengetikan yang lemah (dalam berbagai definisi) memiliki tempat dalam skrip shell, tetapi setiap kali saya harus menyelesaikan masalah yang sama di Bash dan PowerShell, saya dengan menyakitkan diingatkan betapa salahnya saya.
sumber
Ingat ada dua konsep utama yang umumnya bingung:
Pengetikan dinamis
Keuntungan di sini sering diabaikan hanya untuk programmer "baru", tetapi juga bisa nyaman bagi setiap programmer:
Lebih sedikit kode dalam hal apa pun di mana Anda harus memberikan atau menetapkan nilai baru:
Mengetik longgar atau lemah
Manfaat:
Evaluasi boolean implisit . Semua tipe dapat dievaluasi sebagai boolean. Ini juga memiliki manfaat samping seperti bagian dari
||
dapat digunakan dalam penugasan tanpa konversi ke boolean:Sekali lagi, lebih sedikit kode:
Bahkan Java harus pergi sebagian, dengan panggilan implisit
.toString()
ketika menggabungkan objek denganString
; jika tidak, programmer Java akan mengutuknya sepanjang hari (pernyataan log akan di luar kendali).Kedua definisi tersebut berasal dari http://en.wikipedia.org/wiki/Type_system . Dikatakan lebih baik daripada yang saya bisa.
sumber
if
blok digunakan atau logika lain yang lebih kompleks (bahkan runtime atau dinamis), baris berikutnya akan legal dan aman dari kesalahan.Argumen utama untuk mengetik lemah adalah salah satu kinerja. (ini untuk menjawab pertanyaan OP seperti yang dinyatakan). Ada banyak diskusi bagus tentang dinamis vs statis, implisit vs eksplisit. dll.
C adalah bahasa yang diketik dengan lemah yang paling terkenal, dan tidak melakukan pengecekan run time atau kompilasi waktu pengecekan tipe variabel. Pada intinya Anda dapat melemparkan
char *
keint *
dan bahasa tidak akan peduli. Jadi mengapa Anda melakukan ini?Pemrograman C cukup dekat dengan cara Anda akan melakukan hal-hal dengan perakitan, jadi ada kalanya Anda hanya peduli tentang alamat. Bukan hal yang tidak biasa untuk memberikan atau memberikan
void *
referensi karena alasan itu. Jika Anda tahu bagaimana memori diatur (lagi-lagi masalah C dan perakitan), Anda dapat melakukan beberapa perhitungan yang cukup keren berdasarkan alamat divoid *
untuk mendapatkan informasi yang Anda butuhkan. Sebagai contoh, ini dapat membuat Anda mengalami hubungan singkat proses yang harus Anda lalui di Jawa.Sementara pengecekan jenis run-time tidak memiliki sedikit overhead yang luar biasa, ada kalanya itu hanya cukup untuk menyebabkan bagian kritis menjadi terlalu lambat. Saya berpikir sebagian besar tentang pemrograman tertanam dan sistem waktu nyata dalam kasus ini.
Yang mengatakan, dalam kebanyakan kasus memiliki sistem tipe kuat yang baik waktu kompilasi diperiksa atau diperiksa runtime membantu lebih sering daripada sakit.
sumber
Mengetik yang lemah biasanya lebih mudah dipahami oleh pemula, misalnya dalam hal-hal seperti excel, javascript, dan vbscript. Anda juga memperdagangkan beberapa kecepatan pengembangan untuk potensi kesalahan.
Artikel bagus tentang hal ini: Pengetikan yang kuat vs Pengujian yang kuat
sumber