সি # এবং জাভাতে (এবং সম্ভবত অন্যান্য ভাষাও), "চেষ্টা" ব্লকে ঘোষিত ভেরিয়েবলগুলি সংশ্লিষ্ট "ক্যাচ" বা "অবশেষে" ব্লকগুলিতে নেই। উদাহরণস্বরূপ, নিম্নলিখিত কোডটি সংকলন করে না:
try {
String s = "test";
// (more code...)
}
catch {
Console.Out.WriteLine(s); //Java fans: think "System.out.println" here instead
}
এই কোডটিতে, ক্যাচ ব্লকে s এর রেফারেন্সে একটি সংকলন-সময় ত্রুটি দেখা দেয়, কারণ s কেবলমাত্র চেষ্টা ব্লকের ফাঁকে। (জাভাতে, সংকলনের ত্রুটিটি "গুলি সমাধান করা যায় না"; সি # তে এটি "নাম 's' বর্তমান প্রসঙ্গে নেই"))
এই সমস্যার সাধারণ সমাধানটি চেষ্টা ব্লকের পরিবর্তে, চেষ্টা ব্লকের ঠিক আগে পরিবর্তকগুলি ঘোষিত করা বলে মনে হচ্ছে:
String s;
try {
s = "test";
// (more code...)
}
catch {
Console.Out.WriteLine(s); //Java fans: think "System.out.println" here instead
}
তবে, কমপক্ষে আমার কাছে, (1) এটি একটি আড়ম্বরপূর্ণ সমাধানের মতো অনুভূত হয় এবং (২) এর ফলে ভেরিয়েবলগুলি কেবলমাত্র প্রোগ্রামের প্রেক্ষাপটে পরিবর্তিত প্রোগ্রামারের চেয়ে বড় পদ্ধতির (মেথডের অবশিষ্ট অংশ) পরিবর্তিত হয় in চেষ্টা-ধরা-পরিশেষে)।
আমার প্রশ্ন হ'ল, এই ভাষা নকশার সিদ্ধান্তের পিছনে (জাভাতে, সি # তে, এবং / অথবা অন্য কোনও প্রয়োগযোগ্য ভাষায়) যুক্তি (গুলি) কী ছিল?