এমন কয়েকটি (বেশ বিরল) ঘটনা রয়েছে যেখানে এর ঝুঁকি রয়েছে:
একটি ভেরিয়েবল পুনরায় ব্যবহার করা যা পুনরায় ব্যবহারের উদ্দেশ্যে নয় (উদাহরণ 1 দেখুন),
বা অন্যটির পরিবর্তে কোনও ভেরিয়েবল ব্যবহার করে শব্দার্থগতভাবে বন্ধ করুন (উদাহরণ 2 দেখুন)।
উদাহরণ 1:
var data = this.InitializeData();
if (this.IsConsistent(data, this.state))
{
this.ETL.Process(data); // Alters original data in a way it couldn't be used any longer.
}
// ...
foreach (var flow in data.Flows)
{
// This shouldn't happen: given that ETL possibly altered the contents of `data`, it is
// not longer reliable to use `data.Flows`.
}
উদাহরণ 2:
var userSettingsFile = SettingsFiles.LoadForUser();
var appSettingsFile = SettingsFiles.LoadForApp();
if (someCondition)
{
userSettingsFile.Destroy();
}
userSettingsFile.ParseAndApply(); // There is a mistake here: `userSettingsFile` was maybe
// destroyed. It's `appSettingsFile` which should have
// been used instead.
একটি সুযোগ প্রবর্তন করে এই ঝুঁকি হ্রাস করা যেতে পারে:
উদাহরণ 1:
// There is no `foreach`, `if` or anything like this before `{`.
{
var data = this.InitializeData();
if (this.IsConsistent(data, this.state))
{
this.ETL.Process(data);
}
}
// ...
// A few lines later, we can't use `data.Flows`, because it doesn't exist in this scope.
উদাহরণ 2:
{
var userSettingsFile = SettingsFiles.LoadForUser();
if (someCondition)
{
userSettingsFile.Destroy();
}
}
{
var appSettingsFile = SettingsFiles.LoadForApp();
// `userSettingsFile` is out of scope. There is no risk to use it instead of
// `appSettingsFile`.
}
এটি কি ভুল দেখাচ্ছে? আপনি কি এমন সিনট্যাক্স এড়াতে পারবেন? নতুনদের দ্বারা বুঝতে অসুবিধা হয়?