سیستم نوع در جولیا

سلسله‌مراتب انواع، انواع انتزاعی و مشخص، isa و عملگر <:

سیستم نوع جولیا

جولیا سیستم نوع پویا اما غنی دارد — لازم نیست نوع بنویسید، اما وقتی بنویسید کد سریع‌تر و امن‌تر می‌شود!

سلسله‌مراتب انواع

همه انواع در جولیا یک درخت تشکیل می‌دهند با ریشه Any:

Any
├── Number
│   ├── Real
│   │   ├── Integer
│   │   │   ├── Int64, Int32, ...
│   │   └── Bool
│   │   └── AbstractFloat
│   │       └── Float64, Float32
│   └── Complex
├── AbstractString
│   └── String
├── AbstractArray
│   └── Array
└── ...

isa — بررسی نوع

println(42 isa Int64)        # true
println(3.14 isa Float64)    # true
println(3.14 isa Number)     # true! (Float64 فرزند Number است)
println("سلام" isa String)   # true
println([1,2] isa Array)     # true

عملگر <: — زیرنوع

println(Int64 <: Number)      # true (Int64 زیرنوع Number)
println(Float64 <: Real)      # true
println(String <: Number)     # false!
println(Integer <: Number)    # true
<: یعنی «زیرنوع است» — برای بررسی روابط نوع در dispatch خیلی کاربرد دارد!

supertype و subtypes

println(supertype(Int64))     # Signed
println(supertype(Integer))   # Real

println(subtypes(Integer))
-- [Bool, Signed, Unsigned]

انواع انتزاعی در برابر مشخص

نوعمثالمی‌توان ساخت؟
انتزاعی (Abstract)Number, Real, Integer❌ فقط برای dispatch
مشخص (Concrete)Int64, Float64, String✅ مقدار واقعی
x = 42
println(typeof(x))          # Int64 (نوع مشخص)
println(supertype(typeof(x)))   # Signed

چرا سیستم نوع مهم است؟

تبدیل و بررسی

x = 42

println(x isa Integer)    # true
println(x isa Real)       # true
println(x isa Any)        # true — همه چیز Any است!

# تبدیل نوع
println(convert(Float64, 10))   # 10.0
در جولیا نوع‌ها «اختیاری اما قدرتمند» هستند — می‌توانید بدون نوع بنویسید (مثل پایتون) اما با نوع، سرعت C بگیرید!

این مبحث بخشی از دوره آموزش کامل جولیا است.

ابزارهای مرتبط