এমন সময় আছে যখন আমাকে পদ্ধতির মধ্যে থেকেই কোনও পদ্ধতিতে পাস করা কোনও মান পরিবর্তন করতে হবে। একটি উদাহরণ এখানে যেমন এই স্ট্রিং যেমন একটি স্ট্রিং স্যানিটাইজেশন করা হবে:
void SanitizeName(string Name)
{
Name = Name.ToUpper();
//now do something here with name
}
এটি নিখুঁত নিরীহ কারণ যেহেতু Name
যুক্তিটি রেফারেন্সের মাধ্যমে পাস করা হচ্ছে না। যাইহোক, যদি কোনও কারণে, ভবিষ্যতে কোনও বিকাশকারী সমস্ত মানগুলি রেফ দিয়ে পাস করার সিদ্ধান্ত নিয়ে থাকে তবে স্ট্রিংয়ের কোনও স্যানিটাইজিং পদ্ধতিটির বাইরে থাকা মানকে প্রভাবিত করবে যার ক্ষতিকারক ফলাফল হতে পারে।
অতএব, যুক্তিটি নিজেই আবার জমা দেওয়ার পরিবর্তে আমি সর্বদা এর মতো একটি স্থানীয় অনুলিপি তৈরি করি:
void SanitizeName(string Name)
{
var SanitizedName = Name.ToUpper();
//now do something here with name
}
এটি নিশ্চিত করে যে মানটি পাস করার পরিবর্তনের ফলে পদ্ধতির বাইরে যাওয়া কখনই প্রভাবিত করবে না, তবে আমি ভাবছি যে আমি এই সম্পর্কে অত্যধিক ভ্রান্ত হই।
if (param == NULL) param = default_value;
?
by ref
যা উত্তীর্ণ হয়নি probably আগেই উপায়, এবং কোনও কারণে স্থানীয় অ্যাক্সেসকে কোনও অ-স্থানীয় অ্যাক্সেসে রূপান্তর করার কারণে, তিনি সর্বদা সতর্কতার সাথে ফলাফলগুলি পরীক্ষা করে দেখতে পারেন।
Name = Name.ToUpper();
কোডটিকেName
পরিবর্তনের মান হিসাবে অনুসরণ করতে শক্ত করে তোলে । আপনার দ্বিতীয় উদাহরণটি কেবল ভবিষ্যতের প্রমাণ নয়, এটি কী করছে তা যুক্তিযুক্ত করা আরও সহজ।