Un type facultatif / peut-être utile dans les langages dynamiques?


14

Optionalest utile de manière évidente dans un langage typé statiquement, mais je me demande s'il est également utile dans les langages dynamiques. Habituellement, aucun compilateur ne vous dit: "Hé, vous l'avez utilisé Optional<String>comme un String", vous devez donc toujours découvrir vos erreurs au moment de l'exécution. J'ai un arrière-plan de frappe statique et de mon point de vue, je ne vois pas l'avantage d'un Optionaltype dans un langage dynamique.

Réponses:


13

Cette faiblesse n'est vraiment pas différente de celle de tous les types de langues dynamiques. Vous devez l'exécuter pour découvrir ce qu'il contient. Les options ne sont pas vraiment différentes à cet égard.

Les options sont plus qu'une simple annotation statique selon laquelle une valeur peut ou non être présente. Ils ont également des opérations qui leur sont associées. Les chaînes d'opérations mappées sur les options sont une fonctionnalité très utile, qui vous évite d'avoir à vérifier l'échec après chaque étape de la chaîne.

Même si vous ne récupériez que la valeur immédiatement, cela inciterait toujours le programmeur à vérifier pour Nothingla première fois qu'il s'est exécuté et a échoué. Sans option, cette incitation n'aurait lieu que si elle contenait nullla première fois que vous l'exécutiez. Beaucoup de déréférences de pointeurs nuls ont obstinément attendu que le produit soit sur le terrain.


0

Je peux parler pour Objective-C.

Étant donné que les langages typés dynamiques se lient tard, la recherche d'un "facultatif" (une non-valeur est représentée par nil) est inhérente: si vous recherchez le type au moment de l'exécution, vous le recherchez nilimplicitement. Bien sûr, c'est chaînable. Cela se fait également de manière inhérente.

Pour les langages typés statiques, ce concept supplémentaire est un avantage, car ils doivent prendre la décision de type au moment de la compilation - une situation que les langages typés dynamiques n'ont jamais.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.