Any
Um tipo virtual que engloba todos os tipos e nenhum tipo ao mesmo tempo.
Tipo padrão
Any
é o tipo inferido e o tipo de retorno quando nenhum tipo é explicitamente anotado em um método. Por exemplo:
identity = _ -> _
é equivalente a:
identity = (_: Any): Any -> _
Usar Any
, seja implicitamente ou explicitamente, desabilita a verificação de tipos para um argumento. A anotação explícita pode ser útil em casos em que você deseja deixar claro que está dando flexibilidade ao tipo de um parâmetro.
Ser muito liberal com Any
pode tornar seu código menos previsível e mais difícil de manter. É geralmente recomendado ser mais específico com as anotações de tipo sempre que possível:
# Exemplo de uso de Any que pode levar a problemas
console <- fat.console
doubleIt = (arg: Any): Void -> console.log(arg * 2)
doubleIt(2) # imprime: '4'
doubleIt('a') # gera: Error: unsupported expression > Text <multiply> Number
Este exemplo mostra que, embora a anotação de tipo Any
permita flexibilidade no tipo do argumento, também pode resultar em comportamento inesperado se um valor de um tipo inesperado for passado. Ao ser mais específico com a anotação de tipo, como Number
, você pode tornar seu código mais previsível e autoexplicativo.
# Exemplo de uso de uma anotação de tipo específica para maior previsibilidade
console <- fat.console
doubleIt = (num: Number): Void -> console.log(num * 2)
doubleIt(2) # imprime: '4'
doubleIt('a') # gera: TypeError: type mismatch > num
Ao usar Number
como a anotação de tipo, o método doubleIt
agora é mais específico e só aceita argumentos do tipo Number
.
Comparação
A única operação possível com Any
é a comparação com ele, mas note que Any
aceita todos os valores indistintamente, então não há uso prático para isso:
null == Any # verdadeiro
true == Any # verdadeiro
12345 == Any # verdadeiro
'abcd' == Any # verdadeiro
[ 1, 2 ] == Any # verdadeiro
{ a = 8 } == Any # verdadeiro
as comparações com
Any
não podem ser usadas para verificar a presença de um valor em um escopo, pois até mesmonull
é aceito