Closure یا کلوژر تابعی است که می‌تواند متغیرهای محیط پیرامون محل تعریفش را به یاد داشته باشد. در بعضی زبان‌ها ناشناس بودن تابع رایج است، اما هر تابع ناشناس لزوماً نیازمند Capture کردن متغیر خارجی نیست. کلوژر تنها مفهومی مربوط به لاراول یا PHP نیست.

PHP: اعمال تخفیف فروشگاه

$discount = 0.12;
$prices = [150000, 420000];
$final = array_map(function (int $price) use ($discount): float {
    return $price * (1 - $discount);
}, $prices);

$addVat = fn (float $value): float => $value * 1.10;

Python: ساخت تابع قیمت‌گذاری

def discount_policy(rate):
    def apply(price):
        return round(price * (1 - rate))
    return apply

vip_price = discount_policy(0.15)
print(vip_price(500_000))

JavaScript: نگهداری وضعیت در کلوژر

function createCart() {
  let count = 0;
  return () => ++count;
}
const addItem = createCart();
console.log(addItem(), addItem()); // 1, 2

Go: کلوژر برای شمارنده درخواست

func counter() func() int {
    n := 0
    return func() int {
        n++
        return n
    }
}

C#: متغیر Capture شده

decimal taxRate = 0.10m;
Func<decimal, decimal> includeTax = price => price * (1 + taxRate);

نکته فنی

کلوژرها می‌توانند وضعیت قابل تغییر را Capture کنند. اگر تابع در تردهای مختلف اجرا می‌شود، مسئله ریس کاندیشن و همزمانی را هم در نظر بگیرید.

اصطلاحات مرتبط: تابع بازفراخوانی، تابع، ریس کاندیشن، برنامه‌نویسی تابعی، پی‌اچ‌پی، پایتون، گو، سی‌شارپ.