Introduction
জাভা (Java) প্রোগ্রামিং ল্যাঙ্গুয়েজ প্রতিনিয়ত নিজেকে আপডেট করছে যাতে ডেভেলপারদের কাজ আরও সহজ হয় এবং কোড আরও দ্রুত চলে। আজকের আলোচনায় আমরা জানবো JDK 26-এর একটি চমৎকার নতুন ফিচার LazyConstants সম্পর্কে। সহজ কথায়, এটি এমন একটি পদ্ধতি যা আপনার প্রোগ্রামের কোনো ভ্যালু বা ডেটা তখনই তৈরি করবে যখন তার আসলেও প্রয়োজন হবে। এর আগে একে 'Stable Values' বলা হতো, কিন্তু এখন এর নাম ও কাজে বেশ কিছু পরিবর্তন আনা হয়েছে। চলুন বিস্তারিত জানা যাক।
অলসতা বা Laziness কি এবং কেন প্রয়োজন?
ভিডিও রেফারেন্স: [00:38]
প্রোগ্রামিংয়ে "অলসতা" বা "Laziness" আসলে একটি ভালো গুণ! এর মানে হলো, কোনো একটি কঠিন কাজ বা হিসাব-নিকাশ তখনি করা যখন সেটি ছাড়া আর চলছে না।
কেন এটি দরকার? ১. সময় বাঁচানো: যদি কোনো ডেটা আপনার প্রোগ্রামে ব্যবহারই না হয়, তবে সেটি আগে থেকে লোড করে সময় নষ্ট করার দরকার নেই। ২. মেমোরি সাশ্রয়: যখন প্রয়োজন হবে তখন ডেটা তৈরি করলে মেমোরি কম খরচ হয়।
সহজ ব্যাখ্যা: ধরুন আপনি একটি লাইব্রেরিতে গিয়েছেন। আপনি সব বই একসাথে টেবিল এনে রাখবেন না (এটি হবে Eager loading)। বরং যখন যে বইটি পড়ার দরকার হবে, কেবল তখনই সেটি আলমারি থেকে আনবেন। এটাই হলো Laziness।
LazyConstants কী? (JEP 526)
ভিডিও রেফারেন্স: [02:43]
আগে জাভাতে আমরা final কিওয়ার্ড ব্যবহার করতাম যাতে কোনো ভ্যালু একবার সেট করলে আর পরিবর্তন না হয়। কিন্তু এতে সমস্যা ছিল—ভ্যালুটি অবজেক্ট তৈরির সময়ই সেট করে দিতে হতো।
LazyConstant এই সমস্যার সমাধান করে। এটি একটি বিশেষ টাইপ যা আপনাকে সুযোগ দেয় ভ্যালুটা পরে (যখন প্রথমবার get() কল করবেন) সেট করার জন্য, এবং একবার সেট হয়ে গেলে সেটি সারা জীবনের জন্য কনস্ট্যান্ট বা অপরিবর্তনীয় হয়ে যায়।
কোড উদাহরণ:
Java
// সাধারণ জাভা কোড (আগে যা করতাম)
private final String myData = computeData();
// LazyConstant ব্যবহার করে (নতুন নিয়ম)
private final LazyConstant<String> myLazyData = LazyConstant.of(() -> computeData());
// যখন দরকার হবে তখন ডাটা নিবেন
String value = myLazyData.get();
ব্যাখ্যা: এখানে computeData() মেথডটি তখনি চলবে যখন আপনি get() কল করবেন। এর আগে এটি অলসভাবে বসে থাকবে।
কঠিন শব্দের সহজ অর্থ:
-
Supplier: এটি একটি ফাংশন যা কোনো ইনপুট নেয় না কিন্তু একটি রেজাল্ট দেয়। এখানে এটি ডেটা তৈরি করার 'রেসিপি' হিসেবে কাজ করে।
-
Constant Folding: এটি জাভার একটি ইন্টারনাল পাওয়ার। যখন জাভা নিশ্চিত হয় যে কোনো ভ্যালু আর বদলাবে না, তখন সে বারবার চেক না করে সরাসরি সেই ভ্যালুটি ব্যবহার করে কোডকে সুপার ফাস্ট করে দেয়।
Lazy Collections: লিস্ট এবং ম্যাপের অলসতা
ভিডিও রেফারেন্স: [06:04]
মাঝে মাঝে আমাদের শুধু একটি ভ্যালু নয়, বরং একগাদা ডেটা (List বা Map) দরকার হয়। JDK 26-এ এখন Lazy List এবং Lazy Map এর সুবিধাও দেওয়া হয়েছে।
-
Lazy List: আপনি বলে দিবেন লিস্টের সাইজ কত, কিন্তু লিস্টের ভেতরকার আইটেমগুলো তখনি তৈরি হবে যখন আপনি ওই নির্দিষ্ট পজিশনের ডেটা দেখতে চাইবেন।
-
Lazy Map: এখানে কী (Key) অনুযায়ী ভ্যালুগুলো তখনি জেনারেট হবে যখন কেউ ওই চাবি দিয়ে ভ্যালু খুঁজবে।
সুবিধা: আপনার যদি ১০০০ আইটেমের একটি লিস্ট থাকে কিন্তু ইউজার মাত্র ৫টি দেখে, তবে বাকি ৯৯৫টি আইটেম তৈরি করে মেমোরি নষ্ট হবে না।
এর বিবর্তন ও ভবিষ্যৎ (JDK 25 থেকে JDK 27)
ভিডিও রেফারেন্স: [08:22]
এই ফিচারটি হুট করে আসেনি।
-
JDK 25: এর নাম ছিল
Stable Valuesএবং এটি কিছুটা জটিল ছিল। -
JDK 26: নাম সহজ করে রাখা হয়েছে
LazyConstantএবং এটি এখন ব্যবহারের জন্য অনেক বেশি সহজ (User friendly)। -
JDK 27: আশা করা হচ্ছে সামনে এর থেকে অপ্রয়োজনীয় কিছু মেথড (যেমন:
isInitialized) সরিয়ে ফেলা হবে যাতে এটি আরও ক্লিন হয়।
বিশ্লেষণ ও আমার মতামত (Analysis & Thinking)
সৃষ্টিকর্তার উদ্দেশ্য: জাভার মূল কারিগররা (যেমন ভিডিওতে জন রোজ) চাচ্ছেন জাভাকে আরও আধুনিক এবং পারফরম্যান্ট করতে। তারা প্রথমে ইন্টারনাল ফিচারের মাধ্যমে পরীক্ষা করেন, তারপর সেগুলো সাধারণ ডেভেলপারদের জন্য সহজ করে উন্মুক্ত করেন। LazyConstants আসার ফলে মাল্টি-থ্রেডিং (একসাথে অনেক কাজ চলা) অ্যাপ্লিকেশনে ডেটা হ্যান্ডলিং অনেক সহজ ও নিরাপদ হবে।
বাস্তব প্রেক্ষাপট ও সম্ভাবনা: ১. সহজ কনকারেন্সি: আগে একই ভ্যালু নিয়ে একাধিক থ্রেড কাজ করলে ভ্যালু ডুপ্লিকেট হওয়ার ভয় থাকতো। LazyConstant নিশ্চিত করে যে ভ্যালু কেবল একবারই সফলভাবে তৈরি হবে। ২. বিকল্প পদ্ধতি: আগে আমরা "Double-checked locking" বা "Initialization-on-demand holder idiom" ব্যবহার করতাম যা বেশ জটিল ও ভুল হওয়ার সম্ভাবনা থাকতো। নতুন এই ফিচারে সেই জটিলতা একদম নেই।
পরামর্শ: আপনি যদি নতুন কোনো বড় জাভা প্রজেক্ট শুরু করেন যা JDK 26 বা তার উপরের ভার্সনে চলবে, তবে গ্লোবাল কনফিগারেশন বা হেভি অবজেক্ট লোড করার জন্য এই LazyConstant অবশ্যই ব্যবহার করবেন। এটি আপনার অ্যাপ্লিকেশনের স্টার্ট-আপ টাইম (শুরু হওয়ার সময়) কমিয়ে দিবে।
মনে রাখবেন, এটি একটি Preview Feature, তাই প্রোডাকশন লেভেলে ব্যবহারের আগে আপনার এনভায়রনমেন্ট চেক করে নিন।
ইউটিউব ভিডিও লিঙ্ক: LazyConstants in JDK 26
[
LazyConstants in JDK 26 - Inside Java Newscast #106
Java · 8.1K views
](http://www.youtube.com/watch?v=BZlXZyXA4jY)

মন্তব্যসমূহ
একটি মন্তব্য পোস্ট করুন
আপনার সমস্যাটি কমেন্ট করে আমাদের জানান :-d