Un tipo opzionale / forse è utile nei linguaggi dinamici?


14

Optionalè utile in modo ovvio in un linguaggio tipicamente statico, ma mi chiedo se sia utile anche in linguaggi dinamici. Di solito non c'è un compilatore che ti dice "hey, hai usato questo Optional<String>come un String", quindi devi ancora scoprire i tuoi errori in fase di esecuzione. Ho un background di battitura statico e dal mio punto di vista non riesco a vedere il vantaggio di un Optionaltipo in un linguaggio dinamico.

Risposte:


13

Questa debolezza non è davvero diversa da quella di tutti i tipi di linguaggi dinamici. Devi eseguirlo per scoprire cosa c'è dentro. Le opzioni non sono molto diverse al riguardo.

Le opzioni sono più di una semplice annotazione statica che un valore può o non può essere presente. Hanno anche operazioni associate a loro. Le catene di operazioni mappate sulle opzioni sono una funzione molto utile, che ti impedisce di dover controllare eventuali errori dopo ogni passaggio della catena.

Anche se hai immediatamente recuperato il valore, ciò spingerebbe comunque il programmatore a verificare per Nothingla prima volta che è stato eseguito e non è riuscito. Senza un'opzione, quell'incitamento avrebbe luogo solo se si fosse trattato di contenere nullla prima volta che lo hai eseguito. Molti dereference con puntatore nullo hanno testardamente aspettato che il prodotto fosse sul campo.


0

Posso parlare per Objective-C.

Poiché i linguaggi tipizzati dinamici si legano in ritardo, il controllo di un "facoltativo" (un non valore è rappresentato con nil) è inerente: se si controlla il tipo in fase di esecuzione, si verifica nilimplicitamente. Naturalmente questo è concatenabile. Anche questo è intrinsecamente fatto.

Per i linguaggi tipizzati statici questo concetto extra è un vantaggio, perché devono prendere la decisione del tipo al momento della compilazione - una situazione che i linguaggi tipizzati dinamici non hanno mai.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.