JAVAPRO_IR Telegram 4398
🔹 درک مفهوم 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
👍41



tgoop.com/javapro_ir/4398
Create:
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

View MORE
Open in Telegram


Telegram News

Date: |

More>> Joined by Telegram's representative in Brazil, Alan Campos, Perekopsky noted the platform was unable to cater to some of the TSE requests due to the company's operational setup. But Perekopsky added that these requests could be studied for future implementation. With Bitcoin down 30% in the past week, some crypto traders have taken to Telegram to “voice” their feelings. To view your bio, click the Menu icon and select “View channel info.” Healing through screaming therapy
from us


Telegram برنامه نویسی جاوا | Java
FROM American