複合型

2026年3月20日
1 分

複合型は構造体のようなものだ。実際、struct キーワードを使って定義する。

julia> struct Point
         x::Int
         y::Int
       end

複合型は具体型だ。

複合型を定義すると、同名のコンストラクタが作られるので、これを使って複合型の値(オブジェクト)を作ることができる。

julia> p
Point(2, 3)

julia> typeof(p)
Point

自動で作られるコンストラクタのほかに、新しいコンストラクタを定義することもできる。 次のように、Point という名前の関数を作ればいい。

julia> Point(x) = Point(x, 0)
Point

julia> Point(3)
Point(3, 0)

この例では、x座標だけを引数にとり、y座標に 0 を設定する、新しいコンストラクタを作っている。なので Point(3) とすると Point 複合型のオブジェクトが作られる。

複合型が内部に持っている変数をフィールドとよび、. 演算子でアクセスできる。

julia> p.x
2

julia> p.y
3

struct で宣言された複合型はイミュータブルなので、フィールドの値を更新することはできない。

julia> p.x = 7
ERROR: setfield!: immutable struct of type Point cannot be changed
Stacktrace:
 [1] setproperty!(x::Point, f::Symbol, v::Int64)
   @ Base .\Base_compiler.jl:58
 [2] top-level scope
   @ REPL[16]:1

フィールドを更新する必要がある場合、mutable struct キーワードを使って定義する。

julia> mutable struct PointM
         x::Int
         y::Int
       end

julia> mp = PointM(2, 3)
PointM(2, 3)

julia> mp.x
2

julia> mp.x = 7
7

julia> mp.x
7