tgoop.com/javapro_ir/4398
Create:
Last Update:
Last Update:
🔹 درک مفهوم Closure در زبان جاوا
در برنامهنویسی، Closure به سازهای گفته میشود که میتواند به متغیرهای محدودهی خارجی خود (enclosing scope) دسترسی داشته باشد، حتی پس از پایان عمر آن محدوده.
در زبانهایی مانند JavaScript، closure ها بسیار رایج هستند. اما در جاوا از نسخه ۸ به بعد با معرفی Lambda Expressions، امکان استفاده از Closure نیز فراهم شد.
✅ در جاوا Closure چگونه کار میکند؟
با مثالی شروع کنیم:
public class ClosureExample {
public static void main(String[] args) {
int base = 10;
Function<Integer, Integer> adder = (value) -> value + base;
System.out.println(adder.apply(5)); // خروجی: 15
}
}
در اینجا:
متغیر base خارج از لامبدا تعریف شده.
لامبدا (value) -> value + base از این متغیر استفاده میکند.
با این کار، لامبدا به همراه محیطی که به آن نیاز دارد، بستهبندی میشود (همان Closure).
🔒 نکته مهم اینجاست که base باید effectively final باشد. یعنی بعد از مقداردهی اولیه تغییر نکند. در غیر این صورت کامپایل نمیشود:
int base = 10;
base++; // باعث خطا میشود
Function<Integer, Integer> adder = (value) -> value + base;
🎯 کاربرد Closure در جاوا چیست؟
در واقع Closureها به شما اجازه میدهند که تابعهایی بسازید که به وضعیت محیط اطراف خود دسترسی دارند، حتی اگر آن محیط دیگر در stack موجود نباشد. این ویژگی بسیار مفید است در موارد زیر:
زمانی که میخواهید یک تابع تولید کنید که بسته به مقداری خاص رفتار کند.
زمانی که میخواهید دادههایی را داخل یک تابع "به خاطر بسپارید".
✅ یک مثال واقعیتر: تولید کننده ضربکننده (Multiplier Generator)
public class MultiplierFactory {
public static Function<Integer, Integer> createMultiplier(int factor) {
return (value) -> value * factor;
}
public static void main(String[] args) {
Function<Integer, Integer> timesTwo = createMultiplier(2);
Function<Integer, Integer> timesThree = createMultiplier(3);
System.out.println(timesTwo.apply(5)); // خروجی: 10
System.out.println(timesThree.apply(5)); // خروجی: 15
}
}
در این مثال:
هر لامبدا به مقدار factor که در زمان ساخت دریافت کرده دسترسی دارد.
این یعنی لامبدا به همراه محیطش (factor) بستهبندی شده و به عنوان Closure عمل میکند.
🔚 جمعبندی
در جاوا، لامبداهایی که به متغیرهای خارجی دسترسی دارند، Closure هستند.
این متغیرها باید final یا effectively final باشند.
استفاده از Closure باعث میشود توابعی با رفتار وابسته به محیط بسازید، که در طراحی توابع انعطافپذیر بسیار مفید است.
#کاربرـحرفهـای
🆔 @javapro_ir
🆔 @group_javapro
BY برنامه نویسی جاوا | Java
Share with your friend now:
tgoop.com/javapro_ir/4398