Um tipo Opcional / Talvez é útil em idiomas dinâmicos?

14

Optionalé útil de uma maneira óbvia em uma linguagem de tipo estaticamente, mas estou me perguntando se também é útil em linguagens dinâmicas. Normalmente, não há compilador dizendo "ei, você usou isso Optional<String>como String", então você ainda precisa descobrir seus erros em tempo de execução. Eu tenho um plano de fundo de digitação estático e, da minha perspectiva, não vejo o benefício de um Optionaltipo em uma linguagem dinâmica.

Daniel Kaplan
fonte

Respostas:

13

Essa fraqueza não é realmente diferente de todos os tipos em linguagens dinâmicas. Você precisa executá-lo para descobrir o que está nele. As opções não são realmente diferentes nesse sentido.

As opções são mais do que apenas uma anotação estática de que um valor pode ou não estar presente. Eles têm operações associadas a eles também. Cadeias de operações mapeadas em opções são um recurso altamente útil, que impede que você precise verificar se há falhas após cada etapa da cadeia.

Mesmo se você recuperasse o valor imediatamente, ele ainda levaria o programador a verificar pela Nothingprimeira vez que executou e falhou. Sem uma opção, esse estímulo ocorreria apenas se contivesse nulla primeira vez que você o executasse. Muitas desreferências de ponteiros nulos esperaram teimosamente até que o produto estivesse em campo.

Karl Bielefeldt
fonte
0

Eu posso falar pelo Objective-C.

Como as linguagens dinâmicas digitadas se ligam tarde, nilé inerente a verificação de um "opcional" (um valor não é representado ): Se você verificar o tipo no tempo de execução, verificará nilimplicitamente. Claro que isso é encadeado. Isso é feito inerentemente também.

Para linguagens de tipo estáticas, esse conceito extra é um benefício, pois elas precisam tomar a decisão de tipo em tempo de compilação - uma situação que as linguagens de tipo dinâmicas nunca têm.

Amin Negm-Awad
fonte