বাহ্য-স্কুপের ভেরিয়েবলগুলি অভ্যন্তরীণ স্কোপে বৈধ হওয়ায় আপনি যে কারণে বহিরাগত-স্কোপে ভেরিয়েবল উভয় ক্ষেত্রেই লুপের পাশাপাশি এবং লুপের বাইরে উভয় ক্ষেত্রে একই নামের সাথে একটি ভেরিয়েবল সংজ্ঞায়িত না করার কারণ। এর অর্থ হ'ল যদি এটির অনুমতি দেওয়া হয় তবে লুপের মধ্যে দুটি 'আই' ভেরিয়েবল থাকবে।
দেখুন: এমএসডিএন স্কোপস
বিশেষ করে:
স্থানীয় ভেরিয়েবল-ঘোষণার (বিভাগ 8.5.1) এ ঘোষণা করা একটি স্থানীয় ভেরিয়েবলের সুযোগ হ'ল সেই ব্লকটি যেখানে ঘোষণাপত্রটি ঘটে।
এবং
একটি বিবৃতি (বিভাগ 8.8.3) এর একটি জন্য প্রাথমিক জন্য ঘোষিত স্থানীয় ভেরিয়েবলের সুযোগ হ'ল-ইনিশিয়ালাইজার, শর্তাধীন, ফর-পুনরাবৃত্তকারী এবং বিবৃতিটির জন্য থাকা বিবৃতি।
এবং এছাড়াও: স্থানীয় পরিবর্তনশীল ঘোষণা (সি # নির্দিষ্টকরণের বিভাগ 8.5.1)
বিশেষ করে:
স্থানীয় ভেরিয়েবল-ঘোষণায় ঘোষিত স্থানীয় ভেরিয়েবলের সুযোগ হ'ল সেই ব্লকটি যেখানে ঘোষণাপত্রটি ঘটে।স্থানীয় ভেরিয়েবলের স্থানীয়-ভেরিয়েবল-ডিক্লেটারের পূর্বে যে পাঠ্য অবস্থানটিতে স্থানীয় ভেরিয়েবল উল্লেখ করা এটি ত্রুটি। স্থানীয় ভেরিয়েবলের ক্ষেত্রের মধ্যে, একই নামের সাথে অন্য একটি স্থানীয় ভেরিয়েবল বা ধ্রুবক ঘোষণা করা একটি সংকলন-সময় ত্রুটি।
(জোর আমার।)
যার অর্থ আপনার লুপটির i
অভ্যন্তরের স্কোপটি হ'ল ফর লুপ। যদিও i
আপনার ফর-লুপের বাইরের ক্ষেত্রটি পুরো প্রধান পদ্ধতি প্লাস ফর লুপ। মানে আপনার i
লুপের ভিতরে দুটি ঘটনা রয়েছে যা উপরেরটি অনুসারে অবৈধ।
আপনাকে কেন অনুমতি দেওয়া হচ্ছে না int A = i;
তার কারণ int i
হ'ল for
লুপের মধ্যে কেবল ব্যবহারের জন্য স্কোপ করা আছে । সুতরাং এটি আর এর বাইরে প্রবেশযোগ্য নয়for
লুপের ।
আপনি দেখতে পাচ্ছেন যে এই দুটি সমস্যাই স্কোপিংয়ের ফলাফল; প্রথম ইস্যু ( int i = 4;
) এর ফলে লুপ স্কোপের মধ্যে দুটি i
ভেরিয়েবল হবে for
। যদিও int A = i;
সুযোগের বাইরে থাকা একটি চলকটিতে অ্যাক্সেসের ফলস্বরূপ।
পরিবর্তে আপনি যা করতে পারেন তা i
পুরো পদ্ধতিতে স্কোপ হওয়ার ঘোষণা দেওয়া হয়েছে এবং তারপরে এটি দুটি পদ্ধতিতে এবং লুপ স্কোপে ব্যবহার করুন। এটি উভয় নিয়ম ভঙ্গ এড়াতে পারবেন।
public static void Main()
{
int i;
for (i = 0; i < 5; i++)
{
}
// 'i' is only declared in the method scope now,
// no longer in the child scope -> valid.
i = 4;
// 'i' is declared in the method's scope -> valid.
int A = i;
}
সম্পাদনা :
এই কোডটি বেশ কার্যকরভাবে সংকলনের অনুমতি দেওয়ার জন্য সি # সংকলক অবশ্যই পরিবর্তন করা যেতে পারে। সর্বোপরি এই বৈধ:
for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
for (int i = 5; i > 0; i--)
{
Console.WriteLine(i);
}
তবে কী কোড লিখতে সক্ষম হবেন তা আপনার কোড পঠনযোগ্যতা এবং রক্ষণাবেক্ষণের পক্ষে কি সত্যই উপকারী হবে:
public static void Main()
{
int i = 4;
for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
for (int i = 5; i > 0; i--)
{
Console.WriteLine(i);
}
Console.WriteLine(i);
}
এখানে ভুলের সম্ভাবনা সম্পর্কে চিন্তা করুন, i
0 বা 4 টি কি শেষ প্রিন্ট আউট করে? এখন এটি একটি খুব ছোট উদাহরণ, এটি অনুসরণ করা এবং ট্র্যাক করা বেশ সহজ তবে এটি i
কোনও পৃথক নামে বাইরের ঘোষণার চেয়ে অবশ্যই অনেক কম রক্ষণাবেক্ষণযোগ্য এবং পঠনযোগ্য ।
বিশেষ দ্রষ্টব্য:
দয়া করে মনে রাখবেন, সি # এর স্কোপিং নিয়মগুলি সি ++ এর স্কোপিং বিধি থেকে পৃথক । সি ++ এ ভেরিয়েবলগুলি কেবলমাত্র স্কোপে যেখানে সেগুলি ব্লকের শেষ অবধি ঘোষণা করা হয়। যা আপনার কোডকে সি ++ এ একটি বৈধ নির্মাণ করবে।