Tipos Numéricos
Nos exemplos anteriores, não nos preocupamos com o tipo das variáveis. Julia é dinâmica por padrão, ou seja, você não precisa declarar que x é um inteiro. Simplesmente, escrevemos x = 10 e o sistema resolve isso em tempo de execução. Além disso, esse mecanismo permite a reatribuição de tipo, ou seja, podemos fazer x = "dez" (agora x é uma cadeia de caracteres).
Apesar dessa característica, Julia é opcionalmente tipada. Você pode usar o operador :: para restringir tipos, o que ajuda o compilador e serve como documentação:
No caso acima, estamos restringindo que x seja um inteiro de 8 bits. Podemos modificar seu valor, por exemplo x = 35, mas não podemos modificar seu tipo, por exemplo x = "dez".
Julia possui uma hierarquia de tipos. Cada tipo é classificado em abstrato ou concreto. Estes podem ser instanciados, enquanto aqueles não podem. Por exemplo, o tipo Number abrange os inteiros, reais, racionais e irracionais.
y::Number = 10
println("y = ", y, " | Tipo: ", typeof(y))
y = Int8(127)
println("y = ", y, " | Tipo: ", typeof(y))
y = UInt8(255)
println("y = ", y, " | Tipo: ", typeof(y))
y = 3.14
println("y = ", y, " | Tipo: ", typeof(y))
y = 3.14f0
println("y = ", y, " | Tipo: ", typeof(y))
y = 1//3
println("y = ", y, " | Tipo: ", typeof(y))
y = pi
println("y = ", y, " | Tipo: ", typeof(y))
y = true
println("y = ", y, " | Tipo: ", typeof(y))y = 10 | Tipo: Int64
y = 127 | Tipo: Int8
y = 255 | Tipo: UInt8
y = 3.14 | Tipo: Float64
y = 3.14 | Tipo: Float32
y = 1//3 | Tipo: Rational{Int64}
y = π | Tipo: Irrational{:π}
y = true | Tipo: Bool
Verificação de tipo
Para verificar se uma variável é de determinado tipo usaremos a função isa:
isa(numero, Int): false
isa(numero, Signed): true
isa(numero, Integer): true
isa(numero, Number): true
isa(numero, Any): true
Essa função também ser usada no modo infixo: