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: |

Users are more open to new information on workdays rather than weekends. In 2018, Telegram’s audience reached 200 million people, with 500,000 new users joining the messenger every day. It was launched for iOS on 14 August 2013 and Android on 20 October 2013. A Hong Kong protester with a petrol bomb. File photo: Dylan Hollingsworth/HKFP. SUCK Channel Telegram Commenting about the court's concerns about the spread of false information related to the elections, Minister Fachin noted Brazil is "facing circumstances that could put Brazil's democracy at risk." During the meeting, the information technology secretary at the TSE, Julio Valente, put forward a list of requests the court believes will disinformation.
from us


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