অ্যাকসেসর এবং সংশোধক (ওরফে সেটটার এবং গেটার) তিনটি মূল কারণে কার্যকর:
- তারা ভেরিয়েবলগুলিতে অ্যাক্সেসকে সীমাবদ্ধ করে।
- উদাহরণস্বরূপ, একটি ভেরিয়েবল অ্যাক্সেস করা যেতে পারে, তবে পরিবর্তিত হয়নি।
- তারা প্যারামিটারগুলি বৈধতা দেয়।
- তারা কিছু পার্শ্ব প্রতিক্রিয়া হতে পারে।
বিশ্ববিদ্যালয়, অনলাইন কোর্স, টিউটোরিয়াল, ব্লগ নিবন্ধ এবং ওয়েবে কোডের কোডগুলি সমস্তই অ্যাক্সেসর এবং সংশোধনকারীদের গুরুত্ব সম্পর্কে জোর দিয়ে চলেছে, তারা আজকাল কোডটির জন্য প্রায় "একটি" থাকতে হবে বলে মনে করে। সুতরাং নীচের কোডের মতো তারা কোনও অতিরিক্ত মান প্রদান না করেও একজন তাদের সন্ধান করতে পারে।
public class Cat {
private int age;
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
}
বলা হয়ে থাকে, আরও দরকারী পরিবর্তনকারীদের খুঁজে পাওয়া খুব সাধারণ বিষয়, যাঁরা প্রকৃতপক্ষে প্যারামিটারগুলিকে বৈধতা দেয় এবং একটি ব্যতিক্রম ছুঁড়ে দেয় বা যদি কোনও অবৈধ ইনপুট সরবরাহ করা হয় তবে কোনও বুলিয়ান ফিরিয়ে দেয়, এরকম কিছু:
/**
* Sets the age for the current cat
* @param age an integer with the valid values between 0 and 25
* @return true if value has been assigned and false if the parameter is invalid
*/
public boolean setAge(int age) {
//Validate your parameters, valid age for a cat is between 0 and 25 years
if(age > 0 && age < 25) {
this.age = age;
return true;
}
return false;
}
তবে তারপরেও, আমি কখনই কোনও কনস্ট্রাক্টরের কাছ থেকে সংশোধককে কল করা দেখতে পাই না, তাই আমি যে সাধারণ শ্রেণির মুখোমুখি হচ্ছি তার মধ্যে সবচেয়ে সাধারণ উদাহরণ হ'ল:
public class Cat {
private int age;
public Cat(int age) {
this.age = age;
}
public int getAge() {
return this.age;
}
/**
* Sets the age for the current cat
* @param age an integer with the valid values between 0 and 25
* @return true if value has been assigned and false if the parameter is invalid
*/
public boolean setAge(int age) {
//Validate your parameters, valid age for a cat is between 0 and 25 years
if(age > 0 && age < 25) {
this.age = age;
return true;
}
return false;
}
}
তবে কেউ ভাবেন যে এই দ্বিতীয় পদ্ধতিটি অনেক বেশি নিরাপদ:
public class Cat {
private int age;
public Cat(int age) {
//Use the modifier instead of assigning the value directly.
setAge(age);
}
public int getAge() {
return this.age;
}
/**
* Sets the age for the current cat
* @param age an integer with the valid values between 0 and 25
* @return true if value has been assigned and false if the parameter is invalid
*/
public boolean setAge(int age) {
//Validate your parameters, valid age for a cat is between 0 and 25 years
if(age > 0 && age < 25) {
this.age = age;
return true;
}
return false;
}
}
আপনি কি নিজের অভিজ্ঞতার সাথে একই রকম প্যাটার্নটি দেখছেন বা এটি কি আমার দুর্ভাগ্যজনক? এবং যদি আপনি করেন, তবে আপনি কি মনে করেন যে এটি সৃষ্টি করছে? কনস্ট্রাক্টরদের কাছ থেকে মডিফায়ার ব্যবহারের কোনও স্পষ্ট অসুবিধা আছে বা সেগুলি কেবল নিরাপদ হিসাবে বিবেচিত হয়? এটা কি অন্য কিছু?