🔵 ترکیب static final در جاوا – ایجاد ثابتهای سراسری (Global Constants)
در جاوا، وقتی از دو کلمهی کلیدی static و final به صورت ترکیبی استفاده میکنیم، با مفهومی بسیار پرکاربرد روبرو هستیم: ثابت سراسری (global constant).
اما دقیقاً این یعنی چه؟ و چه کاربردی در طراحی برنامهها دارد؟ بیایید دقیق و با مثال بررسی کنیم.
🔹 چرا `static`؟
وقتی یک متغیر را static تعریف میکنیم، دیگر آن متعلق به شیء (object) نیست، بلکه متعلق به خود کلاس است. یعنی برای دسترسی به آن نیازی به ساختن نمونه (instance) از کلاس نیست.
🔹 چرا `final`؟
کلمهی final هم باعث میشود مقدار آن متغیر فقط یک بار مقداردهی شود و دیگر نتوان آن را تغییر داد.
✅ ترکیب static final:
وقتی این دو را ترکیب میکنیم، یک متغیر داریم که:
1. متعلق به کلاس است (نه به شیء)
2. مقدارش قابل تغییر نیست (ثابت است)
3. فقط یک بار مقداردهی میشود (معمولاً هنگام تعریف)
📌 مثال واقعی: تعریف ثابتهای جهانی
اکنون میتوان از این ثابتها در هر جای پروژه استفاده کرد:
🔍 تفاوت با متغیرهای عادی چیست؟
فرض کن به جای static final، فقط final گذاشته بودیم:
در این صورت برای استفاده از API_URL، باید از کلاس Config یک شیء بسازی:
ولی وقتی static باشه:
⚠️ نکته مهم در نوشتن نام ثابتها
در جاوا، یک قانون قراردادی وجود دارد که نام ثابتها (یعنی static final ها) را با حروف بزرگ و آندرلاین (_) مینویسند:
🎯 کجا از static final استفاده کنیم؟
* تنظیمات سراسری برنامه
* آدرسهای URL
* کلیدهای ثابت برای فایلها و SharedPreferences
* پیامهای خطای تکراری
* کدهای وضعیت (مثلاً HTTP Code)
در جاوا، وقتی از دو کلمهی کلیدی static و final به صورت ترکیبی استفاده میکنیم، با مفهومی بسیار پرکاربرد روبرو هستیم: ثابت سراسری (global constant).
اما دقیقاً این یعنی چه؟ و چه کاربردی در طراحی برنامهها دارد؟ بیایید دقیق و با مثال بررسی کنیم.
🔹 چرا `static`؟
وقتی یک متغیر را static تعریف میکنیم، دیگر آن متعلق به شیء (object) نیست، بلکه متعلق به خود کلاس است. یعنی برای دسترسی به آن نیازی به ساختن نمونه (instance) از کلاس نیست.
🔹 چرا `final`؟
کلمهی final هم باعث میشود مقدار آن متغیر فقط یک بار مقداردهی شود و دیگر نتوان آن را تغییر داد.
✅ ترکیب static final:
وقتی این دو را ترکیب میکنیم، یک متغیر داریم که:
1. متعلق به کلاس است (نه به شیء)
2. مقدارش قابل تغییر نیست (ثابت است)
3. فقط یک بار مقداردهی میشود (معمولاً هنگام تعریف)
📌 مثال واقعی: تعریف ثابتهای جهانی
public class Config {
public static final String API_URL = "https://api.myapp.com/";
public static final int MAX_LOGIN_ATTEMPTS = 5;
}
اکنون میتوان از این ثابتها در هر جای پروژه استفاده کرد:
System.out.println("URL: " + Config.API_URL);
if (loginAttempts > Config.MAX_LOGIN_ATTEMPTS) {
System.out.println("Too many failed attempts.");
}
🔍 تفاوت با متغیرهای عادی چیست؟
فرض کن به جای static final، فقط final گذاشته بودیم:
public class Config {
public final String API_URL = "https://api.myapp.com/";
}
در این صورت برای استفاده از API_URL، باید از کلاس Config یک شیء بسازی:
Config cfg = new Config();
System.out.println(cfg.API_URL); // غیربهینه و غیرضروری
ولی وقتی static باشه:
System.out.println(Config.API_URL); // ساده و مستقیم
⚠️ نکته مهم در نوشتن نام ثابتها
در جاوا، یک قانون قراردادی وجود دارد که نام ثابتها (یعنی static final ها) را با حروف بزرگ و آندرلاین (_) مینویسند:
public static final String DATABASE_NAME = "main.db";
🎯 کجا از static final استفاده کنیم؟
* تنظیمات سراسری برنامه
* آدرسهای URL
* کلیدهای ثابت برای فایلها و SharedPreferences
* پیامهای خطای تکراری
* کدهای وضعیت (مثلاً HTTP Code)
#کاربرـپیشرفته
🆔 @javapro_ir
🆔 @group_javapro
👍8😍3
🔹 درک تفاوت final و effectively final در جاوا
در نسخههای جدید جاوا (از Java 8 به بعد)، مفهومی به نام effectively final معرفی شد که درک آن برای کار با Lambdaها و inner class ها ضروری است.
✅ متغیر final:
یعنی متغیری که صراحتاً با کلمهی final تعریف شده و مقدارش پس از مقداردهی اولیه دیگر قابل تغییر نیست.
✅ متغیر effectively final:
یعنی متغیری که کلمهی final ندارد، اما در عمل (effectively) فقط یکبار مقداردهی شده و دیگر تغییر نکرده است. جاوا اجازه میدهد از این متغیرها داخل لامبداها استفاده شود، حتی اگر کلمهی final را نداشته باشند.
🔴 اگر مقدار number را تغییر دهیم، دیگر effectively final نیست و استفاده از آن در لامبدا غیرمجاز میشود:
🎯 چرا این محدودیت وجود دارد؟
در Lambdaها و کلاسهای داخلی (inner classes) از طریق closure به متغیرهای خارج از بلاک خود دسترسی پیدا میکنند. برای اینکه اجرای آنها در آینده (و احتمالاً در threadهای دیگر) مشکلی نداشته باشد، جاوا اصرار دارد که فقط به متغیرهایی دسترسی داشته باشند که قابل تغییر نباشند (یعنی final یا effectively final باشند).
🔍 نکته مهم طراحی نرمافزار:
* این ویژگی باعث میشود که لامبداها قابل پیشبینی، thread-safe و بدون side-effect باقی بمانند.
* اگر میخواهی از مقادیر متغیرهای خارجی استفاده کنی ولی نیاز به تغییر آنها داری، باید از آرایه یا کلاس mutable استفاده کنی:
در نسخههای جدید جاوا (از Java 8 به بعد)، مفهومی به نام effectively final معرفی شد که درک آن برای کار با Lambdaها و inner class ها ضروری است.
✅ متغیر final:
یعنی متغیری که صراحتاً با کلمهی final تعریف شده و مقدارش پس از مقداردهی اولیه دیگر قابل تغییر نیست.
final int x = 10;
x = 20; // خطا
✅ متغیر effectively final:
یعنی متغیری که کلمهی final ندارد، اما در عمل (effectively) فقط یکبار مقداردهی شده و دیگر تغییر نکرده است. جاوا اجازه میدهد از این متغیرها داخل لامبداها استفاده شود، حتی اگر کلمهی final را نداشته باشند.
public class Example {
public static void main(String[] args) {
int number = 5; // not declared as final
Runnable r = () -> System.out.println(number); // مجاز چون effectively final است
r.run();
}
}
🔴 اگر مقدار number را تغییر دهیم، دیگر effectively final نیست و استفاده از آن در لامبدا غیرمجاز میشود:
int number = 5;
number++; // اکنون دیگر effectively final نیست
Runnable r = () -> System.out.println(number); // خطای کامپایل
🎯 چرا این محدودیت وجود دارد؟
در Lambdaها و کلاسهای داخلی (inner classes) از طریق closure به متغیرهای خارج از بلاک خود دسترسی پیدا میکنند. برای اینکه اجرای آنها در آینده (و احتمالاً در threadهای دیگر) مشکلی نداشته باشد، جاوا اصرار دارد که فقط به متغیرهایی دسترسی داشته باشند که قابل تغییر نباشند (یعنی final یا effectively final باشند).
🔍 نکته مهم طراحی نرمافزار:
* این ویژگی باعث میشود که لامبداها قابل پیشبینی، thread-safe و بدون side-effect باقی بمانند.
* اگر میخواهی از مقادیر متغیرهای خارجی استفاده کنی ولی نیاز به تغییر آنها داری، باید از آرایه یا کلاس mutable استفاده کنی:
int[] counter = {0};
Runnable r = () -> counter[0]++;
#کاربرـحرفهـای
🆔 @javapro_ir
🆔 @group_javapro
👍5❤2
با جایگزینی REST API با Kafka Streams، ما تأخیر داشبورد را تا ۸۰٪ کاهش دادیم! تجربهای واقعی از ساخت سرویسهای بلادرنگ با Java و Kafka را بخوانید.
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
😍5
🎓 بزودی دوره رایگان Login/Register با توکن در Spring Boot
📢 یه خبر خوب برای دانشجوهای جاواپرو!
یه دورهی کاربردی داریم با موضوع:
🔐 پیادهسازی سیستم ورود/ثبتنام با JWT Token توی Spring Boot
🎯 تو این دوره یاد میگیری:
🧱 ساختار پروژه در Spring Boot و استفاده از RestController
📘 مفاهیم مقدماتی و اولیه اسپرینگ بوت
🔐 امنیت با Spring Security (JwtFilter و UserDetailService)
🧠 نوشتن سرویسهای Login و Register به شکل عملی
📌 پیشنیازها:
👨💻 آشنایی نسبی با زبان Java
⚙️ شناخت ابتدایی از ابزار Maven
💥 این دوره قراره کاملاً رایگان باشه و فقط مخصوص دانشجوهای جاواپرو منتشر میشه!
🔜 منتظر انتشارش باشید...
➡️ اشتراک 👍 لایک 💬 کامنت
📢 یه خبر خوب برای دانشجوهای جاواپرو!
یه دورهی کاربردی داریم با موضوع:
🔐 پیادهسازی سیستم ورود/ثبتنام با JWT Token توی Spring Boot
🎯 تو این دوره یاد میگیری:
🧱 ساختار پروژه در Spring Boot و استفاده از RestController
📘 مفاهیم مقدماتی و اولیه اسپرینگ بوت
🔐 امنیت با Spring Security (JwtFilter و UserDetailService)
🧠 نوشتن سرویسهای Login و Register به شکل عملی
📌 پیشنیازها:
👨💻 آشنایی نسبی با زبان Java
⚙️ شناخت ابتدایی از ابزار Maven
💥 این دوره قراره کاملاً رایگان باشه و فقط مخصوص دانشجوهای جاواپرو منتشر میشه!
🔜 منتظر انتشارش باشید...
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6😍2
شرکت خدمات انفورماتیک، بهعنوان اولین و بزرگترین ارائهدهنده زیرساختها و راهکارهای بانکی در خاورمیانه و تأمینکننده زیرساخت فنی بانک مرکزی جمهوری اسلامی ایران، جهت تکمیل نیروی انسانی خود در موقعیت شغلی "توسعهدهنده جاوا" از افراد واجد شرایط دعوت به همکاری مینماید.
Nsdd@isc.co.ir
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
ما در بانکینو به دنبال جذب یک توسعهدهنده جاوا (Back-End) باانگیزه و علاقهمند به یادگیری هستیم.
Bankino@middleeastbank.ir
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
مقایسه بین HashMap، Hashtable و ConcurrentHashMap
۱. تفاوت بین HashMap و Hashtable در زبان جاوا چیست؟
۲. آیا HashMap بهصورت پیشفرض ایمن در برابر نخ (Thread-safe) است؟ چگونه میتوان آن را ایمن کرد؟
۳. چرا در کدهای چندنخی، استفاده از ConcurrentHashMap به جای Hashtable توصیه میشود؟
۴. HashMap چگونه برخورد (Collision)های کلید را مدیریت میکند؟
۵. آیا HashMap یا ConcurrentHashMap میتوانند کلید یا مقدار null داشته باشند؟
۱. پیچیدگی زمانی متدهای get() و put() در HashMap در بدترین و میانگین حالت چقدر است؟
۲. HashMap چگونه اندازهی خود را افزایش میدهد و هزینهی این عملیات چیست؟
۳. عملکرد داخلی ConcurrentHashMap در جاوا ۸ نسبت به جاوا ۷ چگونه است؟
۴. منظور از Lock Striping در ConcurrentHashMap چیست و چگونه باعث بهبود همزمانی میشود؟
۵. آیا ConcurrentHashMap برای عملیات ترکیبی مانند putIfAbsent، رفتار اتمی را تضمین میکند؟
۶. سطوح همزمانی در ConcurrentHashMap چه هستند و چه تأثیری بر عملکرد دارند؟
۷. تفاوت بین Collections.synchronizedMap() و ConcurrentHashMap چیست؟
۸. رفتار fail-fast در HashMap چگونه عمل میکند و در مقابل، ConcurrentHashMap چگونه fail-safe است؟
۹. آیا تغییر در ConcurrentHashMap حین پیمایش (iteration) ایمن است؟ چرا؟
۱۰. ضریب بار (Load Factor) در HashMap چه تأثیری بر عملکرد و مصرف حافظه دارد؟
۱۱. از جاوا ۸ به بعد، HashMap از چه ساختار دادهای برای باکتها استفاده میکند؟
۱۲. تأثیر تغییرناپذیری کلید (Immutable Key) در HashMap چیست؟ چرا کلید باید غیرقابل تغییر باشد؟
۱۳. تفاوت بین متدهای compute()، computeIfAbsent() و merge() در ConcurrentHashMap چیست؟
۱۴. چرا ConcurrentHashMap اجازهی استفاده از کلید یا مقدار null را نمیدهد؟
۱۵. طراحی یک Map ایمن برای نخ چگونه انجام میشود؟ چه راهحلی برای قفلگذاری و مقیاسپذیری پیشنهاد میکنید؟
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
🎯 ما در دیجیکالا به دنبال جذب همکار برای دو موقعیت زیر هستیم:
🔹 توسعهدهنده ارشد فرانتاند (Senior Frontend Engineer)
🔹 توسعهدهنده ارشد نرمافزار (Senior Software Engineer)
این موقعیتها در هسته اصلی تیم تکنولوژی دیجیکالا قرار دارند و قراره با هم روی یک پروژه جذاب و بزرگ کار کنیم.
میتونید رزومه خودتون رو به آدرس ایمیل زیر ارسال کنید:
vahid.rezaee@digikala.com
یا از طریق لینکهای زیر بهصورت مستقیم اپلای کنید:
🔗 فرانتاند:
https://careers.digikala.com/job-positions/2702/
🔗 بکاند:
https://careers.digikala.com/job-positions/2700/
📢 اگر کسی رو میشناسید که این موقعیتها میتونه براش جذاب باشه، حتماً این پست رو براش بفرستید.
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
دوستان و همکاران ارجمند،
در یکی از تیمهای نرمافزاری شرکت شاپرک، به یک توسعهدهنده جاوا با شرایط زیر نیازمندیم:
---
🎯 ویژگیهای فردی مورد انتظار:
---
IoC، AOP، Security، JPA، Boot
---
در صورت علاقهمندی، لطفاً رزومه خود را به آدرس زیر ارسال فرمایید:
izadkian@yahoo.com
---
تیمپذیری برای ما اهمیت بالایی دارد.
ترجیح ما داشتن بین ۳ تا ۵ سال سابقه کاری است، اما اگر سابقهی کمتری دارید ولی دانش خوبی دارید، حتماً رزومه خود را ارسال کنید.
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
ما در سیموتک به دنبال جذب چند برنامهنویس توانمند Java با تمرکز بر Spring Framework هستیم.
---
مهارت فنی برای ما مهمتر از تعداد سالهای سابقه کار است.
اگر توانمند هستی، حتماً رزومهات رو برامون بفرست!
---
---
---
تهران، خیابان کریمخان، خیابان خردمند
تماموقت – فقط بهصورت حضوری
---
لطفاً رزومه خود را به آدرس زیر ارسال نمایید:
pouyarezaei810@gmail.com
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
از نسخه IntelliJ IDEA 2025.3 به بعد، شرکت JetBrains نسخههای Community و Ultimate این ابزار را در قالب یک محصول واحد مبتنی بر اشتراک عرضه میکند — و بسیاری از قابلیتهای قدرتمند نسخه Ultimate را بهصورت رایگان در دسترس قرار میدهد!
این حرکت یک موفقیت بزرگ برای دسترسپذیری، بهرهوری و کل اکوسیستم جاوا محسوب میشود.
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🗿1
ساخت یک تحلیلگر هوشمند رزومه از ابتدا تا انتها با استفاده از Java، Spring Boot و AWS 📄
با افتخار یک پروژهی واقعی را معرفی میکنم که بهتازگی طراحی کردهام. این پروژه با ترکیب Spring Boot، خدمات ابری AWS و هوش مصنوعی OpenAI، قادر است رزومهها را تحلیل کرده و اطلاعات مهمی مانند نام، ایمیل، شماره تلفن، مهارتها، سوابق کاری و موارد دیگر را استخراج کند.
🧩 معماری پروژه:
1️⃣ برنامه وب با Spring Boot
فرمی برای بارگذاری رزومه (PDF یا DOCX)
فایل رزومه از طریق یک API REST به Amazon S3 ارسال میشود.
2️⃣ تریگر S3 به Lambda
پس از آپلود فایل، یک تابع AWS Lambda بهطور خودکار فعال میشود.
این تابع، فایل را از S3 دریافت کرده، با استفاده از Apache Tika آن را تجزیه میکند و سپس از API سرویس OpenAI برای استخراج دادههای معنایی بهره میبرد.
3️⃣ مدیریت امن کلیدهای API با Secrets Manager
کلیدهایی مانند OpenAI در زمان اجرا بهصورت امن بازیابی میشوند.
4️⃣ ذخیرهسازی دادهها در DynamoDB
اطلاعات ساختیافته استخراجشده، در یک جدول NoSQL ذخیره میشوند.
5️⃣ فناوریهای بهکاررفته:
🛠 Java، Spring Boot، Apache Tika، OpenAI API
☁ AWS (Lambda، S3، Secrets Manager، DynamoDB)
📦 REST API، JSON، Maven
⚙️ آنچه در این پروژه آموختم:
🔸 توسعه برنامههای Serverless
🔸 پیادهسازی معماریهای امن و بومی فضای ابری
🔸 ترکیب هوش مصنوعی و NLP در سرویسهای بکاند
🔸 نوشتن کدهای جاوا کارآمد، تستپذیر و قابل نگهداری
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
😍3👍1
این نسخه Native است، Virtual است و مبتنی بر Jakarta طراحی شده.
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
چند روز پیش در یک مصاحبه فنی سنگین در حوزه Microservices شرکت کردم و واقعاً چشمم به خیلی چیزها باز شد.
🔹 Service Communication
چطور بین REST، gRPC یا ابزارهای پیامرسانی مثل Kafka برای ارتباط سرویسها تصمیم میگیری؟
🔹 Service Discovery
در یک سیستم بزرگ، چطور طراحی میکنی که سرویسها بهصورت داینامیک همدیگه رو پیدا کنن؟
🔹 Data Consistency
چطور با distributed transactions و eventual consistency در معماری microservices کنار میای؟
🔹 Resilience & Fault Tolerance
چگونه Circuit Breaker، Retry و مکانیزم Fallback پیادهسازی میکنی؟
🔹 Security
برای احراز هویت و مجوزدهی چه استراتژیهایی استفاده میکنی؟ (مثل OAuth2، JWT، API Gateway)
🔹 Scalability
چطور سرویسها رو بهصورت مستقل مقیاسپذیر میکنی بدون اینکه بقیه سرویسها آسیب ببینن؟
🔹 Monitoring & Logging
برای لاگگیری متمرکز و ردیابی توزیعشده (Distributed Tracing) از چه ابزارها یا الگوهایی استفاده میکنی؟
تمرکز اصلی مصاحبه روی تئوری نبود، بلکه روی اینکه چطور در دنیای واقعی این مسائل رو مدیریت میکنی.
اگر برای مصاحبههای Java Microservices آماده میشی، فقط تعریفها رو حفظ نکن — حتماً برای هر مبحث مثال عملی داشته باش
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
فیلدها final هستن
متدهای getter ساخته میشن
کلاس بهصورت immutable طراحی میشه (یعنی دادهها بعد از ایجاد، تغییر نمیکنن)
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
🔹 درک مفهوم Closure در زبان جاوا
در برنامهنویسی، Closure به سازهای گفته میشود که میتواند به متغیرهای محدودهی خارجی خود (enclosing scope) دسترسی داشته باشد، حتی پس از پایان عمر آن محدوده.
در زبانهایی مانند JavaScript، closure ها بسیار رایج هستند. اما در جاوا از نسخه ۸ به بعد با معرفی Lambda Expressions، امکان استفاده از Closure نیز فراهم شد.
✅ در جاوا Closure چگونه کار میکند؟
با مثالی شروع کنیم:
در اینجا:
متغیر base خارج از لامبدا تعریف شده.
لامبدا (value) -> value + base از این متغیر استفاده میکند.
با این کار، لامبدا به همراه محیطی که به آن نیاز دارد، بستهبندی میشود (همان Closure).
🔒 نکته مهم اینجاست که base باید effectively final باشد. یعنی بعد از مقداردهی اولیه تغییر نکند. در غیر این صورت کامپایل نمیشود:
🎯 کاربرد Closure در جاوا چیست؟
در واقع Closureها به شما اجازه میدهند که تابعهایی بسازید که به وضعیت محیط اطراف خود دسترسی دارند، حتی اگر آن محیط دیگر در stack موجود نباشد. این ویژگی بسیار مفید است در موارد زیر:
زمانی که میخواهید یک تابع تولید کنید که بسته به مقداری خاص رفتار کند.
زمانی که میخواهید دادههایی را داخل یک تابع "به خاطر بسپارید".
✅ یک مثال واقعیتر: تولید کننده ضربکننده (Multiplier Generator)
در این مثال:
هر لامبدا به مقدار factor که در زمان ساخت دریافت کرده دسترسی دارد.
این یعنی لامبدا به همراه محیطش (factor) بستهبندی شده و به عنوان Closure عمل میکند.
🔚 جمعبندی
در جاوا، لامبداهایی که به متغیرهای خارجی دسترسی دارند، Closure هستند.
این متغیرها باید final یا effectively final باشند.
استفاده از 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
👍4❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
نسخه جدید بر پایه Spring Framework 7 ساخته شده و ۱۱ تغییر بزرگ را به همراه دارد؛ از کنترل نسخه API و تزریق Bean منعطف گرفته تا Null-Safety پیشرفته و ایجاد آسان HTTP Proxy.
پشتیبانی از GraalVM Native، ارتقاء به Jackson 3.x و بهبودهای Servlet/WebSocket فقط بخشی از این تغییرات است.
در این مقاله همه جزئیات فنی و کدهای نمونه را مرور کردهایم تا مسیر مهاجرت شما سادهتر شود.
⚡️ @javapro_ir✈️ @group_javapro
#اسپرینگ_بوت4 #SpringBoot4 #برنامه_نویسی_جاوا #JavaProgramming #SpringFramework7 #راهنمای_اسپرینگ_بوت #SpringBootGuide #آموزش_اسپرینگ_بوت #SpringBootTutorial
Please open Telegram to view this post
VIEW IN TELEGRAM
ما به دنبال یک توسعهدهنده ارشد جاوا با تجربه در سیستمهای میکروسرویس، مسلط به Spring Boot و پایگاهدادههای SQL و NoSQL هستیم تا به تیم فنی پویا و چابک ما بپیوندد.
تسلط کامل به Java و Spring Boot
تجربه طراحی، پیادهسازی و بهینهسازی سیستمهای توزیعشده
توانایی تحلیل و حل مسئله در حوزه Backend
آشنایی با اصول OOP و معماری Microservice
تجربه کار با Docker
تسلط بر پایگاهدادههای SQL و NoSQL (مانند Elasticsearch)
آشنایی با MQها بهخصوص Kafka
مهارت در نوشتن Unit Test و تستهای عملکرد
آشنایی با دادههای بلادرنگ و WebSocket (مزیت محسوب میشود)
آشنایی با استانداردهای امنیتی و مفاهیم رمزنگاری
تجربه کار با GitLab و فرآیندهای CI/CD
توانایی همکاری مؤثر در تیمهای Agile و بینتیمی (مثل تیمهای AI و Front-End)
مشاهده منبع آگهی
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🚀 فرصت شغلی بینالمللی برای برنامهنویسان
💵 حقوق ماهانه 3 تا 5 هزار دلار بستگی به سطح مهارت
📈 امکان افزایش قابلتوجه درآمد از طریق همکاری همزمان در چند پروژه مشتری.
یک شرکت معتبر آمریکایی فعال در حوزه فناوری اطلاعات به دنبال جذب برنامهنویسان متخصص از سراسر جهان است.
اگر به یکی از زبانهای برنامهنویسی زیر مسلط هستید و انگلیسی شما در سطح بالا است، این میتواند شروع همکاری شما در پروژههای بینالمللی باشد.
✅ شرایط مورد نیاز:
تسلط به یکی از زبانهای برنامهنویسی (حداقل ۵ سال سابقه):
PHP، Java، C#، Python، Ruby یا JavaScript
سطح زبان انگلیسی C1 یا بالاتر
آمادگی برای کار در محیطهای دورکاری و ارتباط مستقیم با مشتریان بینالمللی
💼 مزایا:
همکاری پروژهای و بلندمدت
امکان مشارکت در چند پروژه همزمان
دریافت پاداش عملکرد
💬 فرآیند جذب:
مصاحبهها به زبان انگلیسی انجام میشوند
شامل ارزیابی اولیه و مصاحبه فنی
📍 ارسال درخواست:
📄 فرم ثبتنام را اینجا تکمیل کنید
➡️ اشتراک 👍 لایک 💬 کامنت
یک شرکت معتبر آمریکایی فعال در حوزه فناوری اطلاعات به دنبال جذب برنامهنویسان متخصص از سراسر جهان است.
اگر به یکی از زبانهای برنامهنویسی زیر مسلط هستید و انگلیسی شما در سطح بالا است، این میتواند شروع همکاری شما در پروژههای بینالمللی باشد.
تسلط به یکی از زبانهای برنامهنویسی (حداقل ۵ سال سابقه):
PHP، Java، C#، Python، Ruby یا JavaScript
سطح زبان انگلیسی C1 یا بالاتر
آمادگی برای کار در محیطهای دورکاری و ارتباط مستقیم با مشتریان بینالمللی
همکاری پروژهای و بلندمدت
امکان مشارکت در چند پروژه همزمان
دریافت پاداش عملکرد
مصاحبهها به زبان انگلیسی انجام میشوند
شامل ارزیابی اولیه و مصاحبه فنی
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3