Saya bertanya-tanya mengapa bahasa yang diketik dengan lemah masih aktif dikembangkan. Misalnya, manfaat apa yang dapat diperoleh seseorang dari kemampuan menulis
$someVar = 1;
(...) // Some piece of code
$someVar = 'SomeText';
alih-alih menggunakan versi yang sangat berbeda dan diketik dengan stong
int someInt = 1;
(...)
string SomeString = 'SomeText';
Benar bahwa Anda perlu mendeklarasikan variabel tambahan dalam contoh kedua, tetapi apakah itu benar-benar menyakitkan? Tidakkah semua bahasa harus berusaha keras mengetik karena menerapkan keamanan tipe pada waktu kompilasi, sehingga menghindari beberapa jebakan dalam tipe-casting?
weak-typing
DotNetStudent
sumber
sumber
Jawaban:
Pengetikan kuat / lemah dan pengetikan statis / dinamis bersifat ortogonal.
Kuat lemah adalah tentang apakah jenis nilai itu penting, secara fungsional. Dalam bahasa yang diketik dengan lemah, Anda dapat mengambil dua string yang diisi digit dan melakukan penambahan bilangan bulat pada mereka; dalam bahasa yang sangat diketik, ini adalah kesalahan (kecuali jika Anda melemparkan atau mengonversi nilai ke jenis yang benar terlebih dahulu). Mengetik dengan kuat / lemah bukanlah hal yang hitam-putih; kebanyakan bahasa tidak 100% ketat atau 100% lemah.
Pengetikan statis / dinamis adalah tentang apakah jenis mengikat nilai atau pengidentifikasi. Dalam bahasa yang diketik secara dinamis, Anda dapat menetapkan nilai apa pun untuk variabel apa pun, apa pun jenisnya; pengetikan statis mendefinisikan suatu tipe untuk setiap pengidentifikasi, dan menetapkan dari tipe yang berbeda adalah suatu kesalahan, atau itu menghasilkan suatu pemeran implisit. Beberapa bahasa mengambil pendekatan hibrid, memungkinkan untuk jenis yang dideklarasikan secara statis serta pengidentifikasi yang tidak diketik ('varian'). Ada juga tipe inferensi, suatu mekanisme di mana pengetikan statis dimungkinkan tanpa secara eksplisit menyatakan jenis semuanya, dengan meminta kompiler mengetahui jenis-jenisnya (Haskell menggunakan ini secara luas, C # memaparkannya melalui
var
kata kunci).Pemrograman dinamis yang lemah memungkinkan pendekatan pragmatis; sebagian besar waktu tidak menghalangi bahasa Anda, tetapi bahasa itu tidak akan masuk saat Anda menembak diri sendiri. Sebaliknya, pengetikan statis yang kuat mendorong programmer untuk mengungkapkan harapan tertentu tentang nilai-nilai secara eksplisit dalam kode, dengan cara yang memungkinkan kompiler atau juru bahasa untuk mendeteksi kelas kesalahan. Dengan sistem tipe yang baik, seorang programmer dapat menentukan dengan tepat apa yang dapat dan tidak dapat dilakukan untuk suatu nilai, dan jika, secara tidak sengaja, seseorang mencoba sesuatu yang tidak diinginkan, sistem tipe sering dapat mencegahnya dan menunjukkan dengan tepat di mana dan mengapa segala sesuatunya salah.
sumber
&
untuk penggabungan), operasi menyukai"12"+3
atau45 & "6"
tidak menimbulkan ambiguitas (masing-masing menghitung 15 dan dan "456"). Dalam bahasa yang diketik lebih kuat, operator "+" dapat secara aman kelebihan beban untuk penggabungan string dan penambahan numerik tanpa menyebabkan ambiguitas karena operasi pada string dan angka akan dilarang. Masalah muncul ketika bahasa menentukan jenis atau operasi yang akan dilakukan.Mengetik yang lemah lebih sesuai
1 == "TRUE"
. Bagian ini di wikipedia dengan baik menggambarkan perbedaannya.Harap perhatikan bahwa tidak ada contoh dari wikipedia yang diketik secara statis, yang Anda rujuk pada contoh kedua.
Jadi, jika pertanyaannya adalah, mengapa orang menggunakan bahasa yang diketik secara dinamis, maka jawabannya adalah: sistem tipe statis membatasi Anda. Banyak orang tidak pernah bekerja dengan sistem tipe statis ekspresif, yang mengarahkan mereka pada kesimpulan bahwa kerugian dari pengetikan statis lebih besar daripada manfaatnya.
sumber
Bahasa dengan tipe lemah masih dikembangkan karena orang menggunakannya dan menyukainya. Jika Anda tidak menyukai pengetikan yang lemah, jangan gunakan bahasa yang diketik dengan lemah. Menyatakan bahwa sesuatu adalah Satu Jalan Sejati dan Semua Orang Harus Melakukannya Satu Arah Sejati mengabaikan kerumitan dunia.
sumber
Belum tentu. Learning Objective-C: A Primer membahas pertanyaan itu langsung dalam konteks Objective-C:
sumber