পরিবর্তনযোগ্য/অপরিবর্তনীয় বস্তু কি এবং তারা কিসের জন্য?  - ১

"হাই, অ্যামিগো!"

"হাই, বিলাবো!"

"আজ বিলাবো আপনাকে পরিবর্তনযোগ্য এবং অপরিবর্তনীয় বস্তু সম্পর্কে বলবে ।

"বস্তুগুলি তৈরি করার পরে আপনি পরিবর্তন করতে পারেন সেগুলিকে মিউটেবল বলা হয় ।"

"যে বস্তুগুলি তৈরি হওয়ার পরে পরিবর্তন করা যায় না তাদের অপরিবর্তনীয় বলা হয় ।"

"আমি একটি বস্তু পরিবর্তন করতে পারি কিনা তা নির্ধারণ করে?"

"একটি নতুন শ্রেণীর লেখক সেই শ্রেণীর বস্তুগুলিকে অপরিবর্তনীয় করে তুলতে পারেন৷ উদাহরণস্বরূপ, আপনি যদি সমস্ত সেটারের ব্যক্তিগত করেন, তাহলে একটি বস্তুর শুধুমাত্র একটি কনস্ট্রাক্টর এবং গেটার থাকবে; এর মানে এটি তৈরি হওয়ার পরে এটি পরিবর্তন করা অসম্ভব হবে৷ "

"এবং এর অর্থ কী হবে?"

"অপরিবর্তনীয় বস্তুর অনেক দরকারী বৈশিষ্ট্য আছে, তবে আমি দুটি হাইলাইট করব যা প্রায় সমস্ত অপরিবর্তনীয় বস্তুর জন্য সাধারণ:"

1) অপরিবর্তনীয় বস্তু পরিবর্তনযোগ্য বস্তুর তুলনায় বাস্তবায়ন করা অনেক সহজ।

2) অপরিবর্তনীয় বস্তু এক সাথে একাধিক থ্রেড জুড়ে অবাধে ব্যবহার করা যেতে পারে।

"যখন একজন বিকাশকারী একটি অপরিবর্তনীয় ক্লাস লেখার সিদ্ধান্ত নেন, তখন তিনি সাধারণত ক্লাসের একটি পরিবর্তনযোগ্য এবং অপরিবর্তনীয় উভয় সংস্করণই তৈরি করেন।"

"কিন্তু একটার বদলে দুইটা ক্লাস লিখে লাভ কি?"

"কখনও কখনও এটি মূল্যবান যখন একটি বস্তুর একটি অপরিবর্তনীয় সংস্করণ একটি পরিবর্তনযোগ্য সংস্করণের তুলনায় অনেক সহজ/দ্রুত হবে। তাই, তারা দুটি সংস্করণ তৈরি করে। এটি অ্যারেলিস্ট এবং লিঙ্কডলিস্টের মতো: উভয়ই তালিকা, তবে একটি নির্দিষ্ট উদ্দেশ্যে অপ্টিমাইজ করা হয়, এবং অন্যদের জন্য দ্বিতীয়।"

"এটি ইতিমধ্যে আরও বোধগম্য করে তোলে।"

"এছাড়াও বিশুদ্ধভাবে অপরিবর্তনীয় ক্লাস রয়েছে, যার কোন পরিবর্তনযোগ্য সংস্করণ নেই।"

"কিন্তু যদি সেই বস্তুগুলির একটিতে আমার কিছু পরিবর্তন করার প্রয়োজন হয়? আপনি আসলে একটি অপরিবর্তনীয় বস্তুর সাথে কী করতে পারেন?"

"সাধারণত, অপরিবর্তনীয় ক্লাসে বিভিন্ন পদ্ধতি থাকে যেগুলি বস্তুর পরিবর্তনের মত কাজ করে, কিন্তু এই পদ্ধতিগুলি কেবলমাত্র একটি নতুন বস্তু তৈরি করে এবং বস্তুটি নিজেই পরিবর্তন করার পরিবর্তে এটিকে ফিরিয়ে দেয়।"

"এখানে কিছু উদাহরণঃ:"

জাভা কোড বর্ণনা
String s = "london";
String s2 = s.toUpperCase();
ফলস্বরূপ, s স্ট্রিং "লন্ডন" ধারণ করে এবং s2 তে "লন্ডন" রয়েছে
Integer i = 1;
Integer j = i;
j++;
এখানে আসলে কি ঘটে:
Integer i = new Integer(1);
পূর্ণসংখ্যা j = i;
j = নতুন পূর্ণসংখ্যা (i.getInt()+1);

"স্ট্রিং ক্লাস একটি অপরিবর্তনীয় শ্রেণী। সমস্ত স্ট্রিং অবজেক্ট অপরিবর্তনীয়, কিন্তু এটি আমাদের তাদের সাথে কাজ করতে বাধা দেয় না। উদাহরণস্বরূপ, স্ট্রিং ক্লাসের toUpperCase () পদ্ধতি একটি স্ট্রিংকে বড় হাতের অক্ষরে রূপান্তর করে (অর্থাৎ সমস্ত ছোট অক্ষর প্রতিস্থাপন করে বড় হাতের অক্ষর সহ) যাইহোক, এই পদ্ধতিটি স্ট্রিং নিজেই পরিবর্তন করে না, পরিবর্তে এটি একটি নতুন স্ট্রিং প্রদান করে। এই নতুন স্ট্রিংটি প্রথমটির সাথে অভিন্ন বাদে সমস্ত অক্ষর বড় হাতের (ক্যাপিটাল অক্ষর)।"

"পূর্ণসংখ্যা শ্রেণীটিও একটি অপরিবর্তনীয় শ্রেণী। সমস্ত পূর্ণসংখ্যা বস্তু অপরিবর্তনীয়। প্রতিবার যখন আমরা একটি পূর্ণসংখ্যা বস্তু পরিবর্তন করি, আমরা আসলে একটি নতুন বস্তু তৈরি করি।"

"কি মজার! হুররে, বিলাবো।"

"আমার জন্য হুররে! বিলাবোর জন্য হুররে!"