Apakah jenis Opsional / Mungkin bermanfaat dalam bahasa dinamis?


14

Optionalberguna dalam cara yang jelas dalam bahasa yang diketik secara statis, tapi saya ingin tahu apakah itu juga berguna dalam bahasa yang dinamis. Biasanya tidak ada kompiler yang memberitahu Anda, "hei, Anda menggunakan ini Optional<String>sebagai String", jadi Anda masih harus menemukan kesalahan Anda saat runtime. Saya memiliki latar belakang pengetikan yang statis dan dari sudut pandang saya, saya tidak dapat melihat manfaat dari pengetikan Optionaldalam bahasa yang dinamis.

Jawaban:


13

Kelemahan itu benar-benar tidak berbeda dari semua jenis dalam bahasa dinamis. Anda harus menjalankannya untuk mencari tahu apa yang ada di dalamnya. Opsi tidak terlalu berbeda dalam hal itu.

Opsi lebih dari sekadar anotasi statis yang nilainya mungkin ada atau tidak ada. Mereka memiliki operasi yang terkait dengannya juga. Rantai operasi yang dipetakan pada opsi adalah salah satu fitur yang sangat berguna, yang membuat Anda tidak perlu memeriksa kegagalan setelah setiap langkah dalam rantai.

Bahkan jika Anda hanya segera mengambil nilainya, masih akan mendorong programmer untuk memeriksa Nothingsaat pertama kali dijalankan dan gagal. Tanpa opsi, dorongan itu hanya akan terjadi jika kebetulan mengandung nullpertama kali Anda menjalankannya. Banyak dereference null pointer telah dengan keras kepala menunggu sampai produk berada di lapangan.


0

Saya dapat berbicara untuk Objective-C.

Karena bahasa yang diketik secara dinamis mengikat terlambat, memeriksa "opsional" (nilai tidak diwakili dengan nil) adalah inheren: Jika Anda memeriksa jenis saat runtime, Anda memeriksa nilsecara implisit. Tentu saja ini tidak bisa dilacak. Ini dilakukan secara inheren juga.

Untuk bahasa yang diketik statis, konsep tambahan ini bermanfaat, karena mereka harus mengambil keputusan mengetik pada waktu kompilasi - situasi yang tidak pernah dimiliki oleh bahasa yang diketik secara dinamis.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.