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?
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?
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.
Ingat ada dua konsep utama yang umumnya bingung:
Bahasa pemrograman dikatakan diketik secara dinamis ketika sebagian besar pemeriksaan tipenya dilakukan pada saat run-time dibandingkan dengan saat kompilasi. Dalam pengetikan dinamis, nilai memiliki tipe tetapi variabel tidak; artinya, variabel dapat merujuk ke nilai jenis apa pun.
Keuntungan di sini sering diabaikan hanya untuk programmer "baru", tetapi juga bisa nyaman bagi setiap programmer:
if (!(arr is Array)) arr = [arr]; // is, instanceof, .constructor ==, whatever
Lebih sedikit kode dalam hal apa pun di mana Anda harus memberikan atau menetapkan nilai baru:
if (data is Array)) {
i = data.length; // no i = ((Array)data).length or Array myArr=(Array)data;
}
Pengetikan yang lemah berarti bahwa suatu bahasa secara implisit mengkonversi (atau menggunakan) tipe-tipe saat digunakan.
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:
var a = param || defaultValue;
Sekali lagi, lebih sedikit kode:
var num = 5;
var str = "Hello";
input.innerHTML = input.value = num;
for (var i=0; i < input.value; i++) { ... }
Bahkan Java harus pergi sebagian, dengan panggilan implisit .toString()
ketika menggabungkan objek dengan String
; 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.
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 *
ke int *
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 di void *
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.
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