توابع بینام و درجهبالا در جولیا
توابع arrow (->)، map، filter و reduce — سبک تابعی جولیا
تابع بینام چیست؟
تابع بینام (Anonymous Function) تابعی بدون نام است — برای استفاده یکباره. در جولیا با -> (فلش):
# ساختار: آرگومان -> بدنه
double = x -> 2x
println(double(5)) # 10
# چند آرگومان
add = (a, b) -> a + b
println(add(3, 4)) # 7
map — اعمال تابع روی کالکشن
nums = [1, 2, 3, 4, 5]
# با تابع بینام
squares = map(x -> x^2, nums)
println(squares) # [1, 4, 9, 16, 25]
# با تابع موجود
println(map(sqrt, [4, 9, 16])) # [2.0, 3.0, 4.0]
# روی دو آرایه
println(map((a, b) -> a + b, [1, 2, 3], [10, 20, 30])) # [11, 22, 33]
filter — فیلتر کردن
nums = 1:10
# فقط زوجها
evens = filter(x -> x % 2 == 0, nums)
println(evens) # [2, 4, 6, 8, 10]
# فقط مثبتها
mixed = [-3, 5, -1, 8, 0, -7]
positives = filter(x -> x > 0, mixed)
println(positives) # [5, 8]
reduce — کاهش به یک مقدار
nums = [1, 2, 3, 4, 5]
# جمع همه
total = reduce(+, nums)
println(total) # 15
# با عملگر دلخواه
product = reduce(*, nums)
println(product) # 120
# با تابع
maxVal = reduce(max, nums)
println(maxVal) # 5
ترکیب طلایی: map + filter + reduce
nums = 1:20
# مجموع مربعهای زوجها
result = nums |> filter(x -> x % 2 == 0) |> map(x -> x^2) |> sum
println(result) # 2²+4²+...+20² = 2870
عملگر
|> (pipe) خروجی را به تابع بعدی میدهد — مثل لولهکشی! این سبک در جولیا خیلی رایج است.do — شکل خواناتر
# بهجای تابع بینام داخل آرگومان:
result = map(nums) do x
if x > 10
x * 100
else
x
end
end
توابع درجهبالا
توابعی که توابع میگیرند یا برمیگردانند:
# سازنده تابع
function makeMultiplier(n)
return x -> x * n
end
double = makeMultiplier(2)
triple = makeMultiplier(3)
println(double(10)) # 20
println(triple(10)) # 30
مثال عملی: پردازش داده
students = [
("علی", 18),
("مریم", 20),
("رضا", 12),
("سارا", 16),
]
-- فقط قبولشدهها (نمره >= 15)
passed = filter(s -> s[2] >= 15, students)
println(passed)
-- نامهای قبولی
names = map(s -> s[1], passed)
println(names)
-- میانگین کل
avg = map(s -> s[2], students) |> sum |> x -> x / length(students)
println("میانگین: ", avg)
این مبحث بخشی از دوره آموزش کامل جولیا است.