型とその階層構造

2026年3月20日
1 分

Julia の型は、具体型(concrete type)と抽象型(abstract type)に分けられる。 プリミティブ型はすべて具体型だ。

型は階層構造をなしていて、抽象型は具体型の親、あるいはその親…になっている。

親(supertype)の型は supertype 関数で確認できる。

julia> supertype(Float64)
AbstractFloat

一方、どんな型を子(subtype)に持つかは subtypes 関数。

julia> subtypes(AbstractFloat)
5-element Vector{Any}:
 BigFloat
 Core.BFloat16
 Float16
 Float32
 Float64

階層構造は多数の階層があり、遡っていくと Any 型に行き着く。

julia> supertype(Float64)
AbstractFloat

julia> supertype(AbstractFloat)
Real

julia> supertype(Real)
Number

julia> supertype(Number)
Any

julia> supertype(Any)
Any

Any はすべての型のおおもとの親ってわけだ。

抽象型は、インスタンス化することができない。言い換えると、何かの値の型はすべて具体型だ。 例えば、浮動小数点数は一般に Float16Float32Float64 のいずれかで、AbstractFloat ではない。

型を指定するには :: の後に型名をつける。変数のほか、関数の引数や返り値などにつけることができる。

julia> x::Int = 8
8

julia> typeof(x)
Int64

julia> y = 8::Int64
8

julia> typeof(y)
Int64