আমি তার উত্তরে এরিক লিপার্টের নির্দিষ্ট পয়েন্টটি বিস্তারিতভাবে বর্ণনা করতে চাই এবং একটি নির্দিষ্ট অনুষ্ঠানে স্পটলাইট স্থাপন করতে চাই যা অন্য কারও দ্বারা ছোঁয়া হয়নি। এরিক বলেছেন:
[...] একটি অ্যাসাইনমেন্ট প্রায় সবসময় সেই মানের পিছনে ফেলে যায় যা কেবলমাত্র একটি রেজিস্টারে নির্ধারিত হয়েছিল।
আমি বলতে চাই যে অ্যাসাইনমেন্টটি সর্বদা আমাদের বাম অপারেণ্ডে নির্ধারিত মানটির পিছনে থাকবে। শুধু "প্রায় সর্বদা" নয়। তবে আমি জানি না কারণ ডকুমেন্টেশনে এই সমস্যাটির মন্তব্য পাওয়া যায়নি। তাত্ত্বিকভাবে "পিছনে ছেড়ে" যাওয়া এবং বাম অপারেন্ডটি পুনরায় মূল্যায়ন না করার জন্য এটি একটি কার্যকর কার্যকর পদ্ধতি হতে পারে, তবে কী এটি দক্ষ?
এই থ্রেডের উত্তরে এখনও পর্যন্ত নির্মিত সমস্ত উদাহরণের জন্য 'দক্ষ' হ্যাঁ। কিন্তু গেট- এবং সেট অ্যাক্সেসর ব্যবহার করে এমন বৈশিষ্ট্য এবং সূচকগুলির ক্ষেত্রে দক্ষ? একেবারেই না. এই কোডটি বিবেচনা করুন:
class Test
{
public bool MyProperty { get { return true; } set { ; } }
}
এখানে আমাদের একটি সম্পত্তি আছে, যা একটি ব্যক্তিগত ভেরিয়েবলের জন্য একটি মোড়ক এমনকি নয়। যখনই আহ্বান করা হয়েছে সে সত্য প্রত্যাবর্তন করবে, যখনই কেউ তার মূল্য নির্ধারণ করার চেষ্টা করে সে কিছুই করবে না। সুতরাং এই সম্পত্তি যখনই মূল্যায়ন করা হয়, তিনি সত্যবাদী হতে হবে। এর কি দেখতে দিন:
Test test = new Test();
if ((test.MyProperty = false) == true)
Console.WriteLine("Please print this text.");
else
Console.WriteLine("Unexpected!!");
অনুমান করুন এটি কি প্রিন্ট করে? এটি মুদ্রণ Unexpected!!। এটি সক্রিয় হিসাবে, সেট অ্যাক্সেসর প্রকৃতপক্ষে বলা হয়, যা কিছুই করে না। তবে তারপরে, গেট অ্যাকসেসরটিকে কখনই ডাকা হয় না। অ্যাসাইনমেন্টটি কেবল falseআমাদের সম্পত্তিতে নির্ধারিত মানটির পিছনে চলে যায় । এবং এই falseমানটি যদি স্টেটমেন্টটি মূল্যায়ন করে।
আমি একটি বাস্তব বিশ্বের উদাহরণ দিয়ে শেষ করব যা আমাকে এই সমস্যাটি নিয়ে গবেষণা করতে পেরেছে। আমি এমন একটি সূচক তৈরি করেছি যা সংগ্রহের জন্য একটি সুবিধাজনক মোড়ক ( List<string>) যা আমার এক শ্রেণীর ব্যক্তিগত ভেরিয়েবল হিসাবে ছিল।
সূচককে পাঠানো প্যারামিটারটি একটি স্ট্রিং ছিল, যা আমার সংগ্রহে মান হিসাবে বিবেচিত হবে। গিগ অ্যাক্সেসরটি যদি সেই তালিকা তালিকায় উপস্থিত থাকে বা না থাকে তবে সত্য বা মিথ্যা ফিরে আসবে। সুতরাং গেট অ্যাকসেসরটি List<T>.Containsপদ্ধতিটি ব্যবহার করার অন্য উপায় ছিল ।
যদি সূচকের সেট অ্যাকসেসরটিকে একটি যুক্তি হিসাবে একটি স্ট্রিং সহ ডাকা হয় এবং ডান অপরেন্ডটি একটি বুল হয় trueতবে তিনি সেই পরামিতিটি তালিকায় যুক্ত করবেন। তবে যদি একই প্যারামিটারটি অ্যাক্সেসরে প্রেরণ করা হয় এবং ডান অপরেন্ডটি একটি বুল হয় তবে falseতিনি পরিবর্তে উপাদানটি তালিকা থেকে মুছবেন। সুতরাং সেট অ্যাক্সেসর উভয় List<T>.Addএবং একটি সুবিধাজনক বিকল্প হিসাবে ব্যবহৃত হয়েছিল List<T>.Remove।
আমি ভেবেছিলাম আমার কাছে একটি গেইটওয়ে হিসাবে প্রয়োগ করা নিজস্ব যুক্তি দিয়ে তালিকাটি মোড়ানো একটি ঝরঝরে এবং কমপ্যাক্ট "এপিআই" আছে। একা এক সূচকের সাহায্যে আমি কয়েকটি সেট কীস্ট্রোক দিয়ে অনেক কিছুই করতে পারি। উদাহরণস্বরূপ, আমি কীভাবে আমার তালিকায় একটি মান যুক্ত করার চেষ্টা করতে পারি এবং এটি সেখানে রয়েছে তা যাচাই করতে পারি? আমি ভেবেছিলাম এটি প্রয়োজনীয় কোডের একমাত্র লাইন:
if (myObject["stringValue"] = true)
; // Set operation succeeded..!
তবে আমার আগের উদাহরণটি যেমন দেখিয়েছে, সেই গেট অ্যাকসেসর যা দেখে মনে করা হয় যে তালিকার মানটি সত্যিই আছে কিনা তাও কল করা হয়নি। trueমান সবসময় পিছনে কার্যকরভাবে অন্তক যাই হোক না কেন যুক্তিবিজ্ঞান আমি আমার পেতে অ্যাকসেসর বাস্তবায়িত করেছিলেন রাখা হয়।