Tuple و NamedTuple در جولیا
Tuple های تغییرناپذیر، NamedTuple با نام فیلد و کاربردهای هرکدام
Tuple چیست؟
Tuple کالکشن مرتب اما تغییرناپذیر (immutable) است — وقتی ساختید، دیگر نمیتوانید تغییرش دهید:
# تعریف با پرانتز
point = (10, 20)
person = ("علی", 25, "تهران")
# دسترسی (از ۱!)
println(point[1]) # 10
println(person[2]) # 25
-- point[1] = 99 -- ❌ خطا! Tuple تغییرناپذیر است
تفاوت Tuple و Array
| ویژگی | Tuple | Array |
|---|---|---|
| تغییرپذیری | ❌ تغییرناپذیر | ✅ تغییرپذیر |
| نماد | ( ) | [ ] |
| انواع عناصر | معمولاً مخلوط | معمولاً یکسان |
| کاربرد | مقادیر برگشتی، بستهبندی | لیستهای پویا |
| سرعت | سریعتر (کامپایلشده) | — |
باز کردن Tuple (Destructuring)
point = (10, 20)
x, y = point
println("x=$x, y=$y") # x=10, y=20
# تعویض بدون متغیر کمکی
a, b = 1, 2
a, b = b, a
println("$a $b") # 2 1
Tuple برای چند مقدار برگشتی
یکی از رایجترین کاربردها — توابعی که چند چیز برمیگردانند:
function minMax(arr)
return (minimum(arr), maximum(arr))
end
smallest, largest = minMax([5, 2, 9, 1, 7])
println("کوچکترین: $smallest") # 1
println("بزرگترین: $largest") # 9
NamedTuple — Tuple با نام!
مثل Tuple اما هر عنصر نام دارد — بین struct و Tuple:
# تعریف با نام = مقدار
person = (name="علی", age=25, city="تهران")
# دسترسی با نام
println(person.name) # علی
println(person.age) # 25
# یا با ایندکس
println(person[1]) # علی
NamedTuple برای «شیء سبک» عالی است — بدون تعریف struct، داده ساختیافته داشته باشید!
کاربرد عملی: پیکربندی
config = (
host = "localhost",
port = 8080,
debug = true,
)
println("سرور: $(config.host):$(config.port)")
println("دیباگ: $(config.debug)")
پیمایش Tuple
person = ("علی", 25, "تهران")
for item in person
println(item)
end
# NamedTuple
np = (a=1, b=2, c=3)
for (key, value) in pairs(np)
println("$key = $value")
end
کجا از کدام استفاده کنیم؟
- Array: لیست پویا از دادههای همنوع
- Tuple: گروه ثابت از مقادیر (مثل مختصات x,y)
- NamedTuple: داده ساختیافته سبک (مثل config)
- Struct: داده ساختیافته جدی با متد (بعداً!)
این مبحث بخشی از دوره آموزش کامل جولیا است.