Introduction
এই ভিডিওতে ওরা জাভা ল্যাঙ্গুয়েজের নতুন কিছু ফিচার নিয়ে কথা বলেছে। বিশেষ করে 'Carrier Classes' (বা Component Classes) কী এবং এগুলো কীভাবে জাভাতে ডাটা হ্যান্ডেল করার পদ্ধতি বদলে দিচ্ছে, তা নিয়ে আলোচনা করা হয়েছে। রেকর্ড (Records) আসার পর জাভাতে কোড লেখা অনেক সহজ হয়েছে, কিন্তু সাধারণ ক্লাসগুলোকে কীভাবে রেকর্ডের মতো সুবিধা দেওয়া যায়, সেই বিবর্তনটাই এখানে মূল বিষয়।
ক্যারিয়ার ক্লাসের প্রথম প্রস্তাব (First Proposal)
রেফারেন্স: [14:14]
শুরুতে আইডিয়া ছিল যে, একটা ক্লাসের হেডারেই (Header) আমরা বলে দেব যে এই ক্লাসের ভেতর কী কী কম্পোনেন্ট আছে। এর মাধ্যমে জাভা অটোমেটিকালি equals, hashCode, এবং toString মেথডগুলো তৈরি করে দেবে।
বিস্তারিত: রেকর্ড ক্লাসে যেমন ব্র্যাকেটের ভেতর সব ভেরিয়েবল লিখে দেওয়া হয়, ক্যারিয়ার ক্লাসেও অনেকটা সেরকম করার চেষ্টা করা হয়েছিল। এতে সুবিধা হতো যে আপনাকে বারবার একঘেয়ে কোড (Boilerplate code) লিখতে হতো না। কিন্তু ব্রায়ান গেটজ (Java Architect) খেয়াল করলেন যে, এতে সিস্টেমটা অনেক জটিল হয়ে যাচ্ছে। কারণ এটি ক্লাসের ওপর অনেক বেশি সীমাবদ্ধতা তৈরি করছিল, যা অনেকটা রেকর্ডের মতোই হয়ে যাচ্ছিল।
- সহজ ব্যাখ্যা (Boilerplate code): প্রೋಗামিংয়ে কিছু কোড আছে যা বারবার একই রকম লিখতে হয় (যেমন গেটার/সেটার)। এগুলোকে 'বয়লারপ্লেট' বলা হয়।
দ্বিতীয় ও বর্তমান প্রস্তাব (Second Proposal)
রেফারেন্স: [15:57]
দ্বিতীয়বার যখন তারা এটা নিয়ে ভাবলেন, তখন তারা ফোকাস করলেন 'API' এর ওপর। অর্থাৎ, একটা ক্লাসকে কীভাবে ভেঙে ফেলা যায় (Deconstruction), তার ওপর বেশি গুরুত্ব দেওয়া হলো।
বিস্তারিত: এবারের প্রস্তাবে বলা হলো, ক্লাসের হেডারে কম্পোনেন্ট লিস্ট থাকার মানে হলো—"আমি এই জিনিসগুলো দিয়ে তৈরি এবং আমাকে এইভাবেই ভাঙা যাবে।" এটা অনেকটা কোনো খেলনা বা যন্ত্রের পার্টস আলাদা করার মতো। যদি আপনার ক্লাসে একটি কনস্ট্রাক্টর (Constructor) থাকে যার প্যারামিটারগুলো এই লিস্টের সাথে মিলে যায়, তবে জাভা সেটাকে অটোমেটিকালি গ্রহণ করে নেবে। এর ফলে কোড আরও নমনীয় (Flexible) হয়।
- সহজ ব্যাখ্যা (Deconstruction): ধরুন আপনার কাছে একটি 'বিন্দু' (Point) ক্লাস আছে যার মান x=10 এবং y=20। ডিকনস্ট্রাকশন মানে হলো সেই ক্লাস থেকে সরাসরি 10 এবং 20 মান দুটি আলাদা করে নেওয়া।
রিকনস্ট্রাকশন এবং উইদার্স (Reconstruction & Withers)
রেফারেন্স: [18:01]
নতুন আইডিয়াগুলোর মধ্যে একটি হলো 'Reconstruction'। অর্থাৎ একটা অবজেক্টকে ভেঙে আবার নতুন করে গড়া।
বিস্তারিত: মাঝে মাঝে আমাদের প্রয়োজন হয় একটি অবজেক্টের সব মান ঠিক রেখে শুধু একটি মান পরিবর্তন করে নতুন একটি অবজেক্ট তৈরি করা। জাভাতে এটাকে সহজ করার জন্য 'Withers' বা with কীওয়ার্ড নিয়ে কাজ চলছে। যেমন: myObject with { x = 5 }। ক্যারিয়ার ক্লাস এই রিকনস্ট্রাকশন প্রসেসকে অনেক সহজ করে দেবে।
ডাটা মার্শালিং ও সিরিয়ালাইজেশন (Marshalling & Serialization)
রেফারেন্স: [19:11]
যদি আমরা কোনো ক্লাসকে সঠিকভাবে ভাঙতে এবং আবার জোড়া লাগাতে পারি, তবে সেই ডাটা ইন্টারনেটের মাধ্যমে পাঠানো (Serialization) অনেক সহজ হয়।
বিস্তারিত: ভিডিওতে বলা হয়েছে, ডিকনস্ট্রাকশন প্রোটোকল থাকলে ডাটাকে খুব সহজেই JSON বা অন্য ফরম্যাটে রূপান্তর করে অন্য কোথাও পাঠানো যাবে এবং সেখানে আবার আগের অবস্থায় ফিরিয়ে আনা যাবে। এতে ডেটার নিরাপত্তা এবং নির্ভুলতা বাড়ে।
এনালাইসিস এবং আমার ভাবনা
ভিডিওর এই অংশটি থেকে বোঝা যায় যে, জাভা টিম এখন কোড কমানোর চেয়ে সেমান্টিক কন্ট্রাক্ট (Semantic Contract) বা কোডের অর্থপূর্ণ ব্যবহারের দিকে বেশি নজর দিচ্ছে।
বাস্তবতা ও সম্ভাবনা: ১. সহজ কোড: ভবিষ্যতে জাভা ডেভেলপারদের আর হাজার হাজার লাইনের অপ্রয়োজনীয় কোড লিখতে হবে না। ২. ভুল কম হওয়া: অটোমেটিক মেথড তৈরির ফলে হাতে কোড লেখার সময় যে ভুলগুলো হয়, তা কমে যাবে। ৩. বিকল্প চিন্তা: লম্বক (Lombok) লাইব্রেরি বর্তমানে এই কাজগুলো করে দেয়, কিন্তু জাভা নিজে থেকে এই ফিচারগুলো আনলে থার্ড-পার্টি লাইব্রেরির ওপর নির্ভরতা কমবে।
পরামর্শ: আপনি যদি নতুন জাভা শিখছেন, তবে Records সম্পর্কে ভালো ধারণা নিন। কারণ ক্যারিয়ার ক্লাস মূলত রেকর্ডের সীমাবদ্ধতাগুলো দূর করার জন্যই আসছে। জাভার পরবর্তী আপডেটগুলোতে এই with এক্সপ্রেশন এবং ডিকনস্ট্রাকশন প্যাটার্নগুলো আপনার কোডিং স্টাইলকে আরও স্মার্ট করে তুলবে।
সহজ ভাষায় কিছু কঠিন শব্দের ব্যাখ্যা:
-
Encapsulation (এনক্যাপসুলেশন): ডাটাকে একটি প্যাকেটের (ক্লাস) মধ্যে নিরাপদ রাখা।
-
Canonical Constructor: একটি স্ট্যান্ডার্ড নিয়ম মেনে তৈরি করা কনস্ট্রাক্টর যা ক্লাসের সব ডাটা সেট করে।
-
Semantic: কোডের বাহ্যিক রূপ নয়, বরং কোডটি আসলে কী বোঝাতে চাচ্ছে সেই মূল অর্থ।
[
Carrier Classes & Discussing Syntax - Inside Java Podcast 52
Java · 3K views
](http://www.youtube.com/watch?v=b6cXuA84c9g)

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