স্থানীয় ভেরিয়েবলগুলির পিছনে ধারণাটি হ'ল সেগুলি কেবল সীমিত সুযোগের ভিতরেই রয়েছে যার জন্য তাদের প্রয়োজন। এই হিসাবে, মূল্য সম্পর্কে অনিশ্চয়তার খুব কম কারণ থাকতে হবে, বা কমপক্ষে, যেখানে সেই মানটি এসেছে। আমি স্থানীয় ভেরিয়েবলের জন্য একটি ডিফল্ট মান থাকার কারণে উদ্ভূত অনেক ত্রুটি কল্পনা করতে পারি।
উদাহরণস্বরূপ, নিম্নোক্ত সাধারণ কোডটি বিবেচনা করুন ... ( এনবি আসুন প্রজ্ঞাপনের উদ্দেশ্যে ধরে নেওয়া যাক যে স্থানীয় ভেরিয়েবলগুলি একটি স্পষ্টরূপে আরম্ভ না করা থাকলে একটি ডিফল্ট মান নির্ধারিত হয় )
System.out.println("Enter grade");
int grade = new Scanner(System.in).nextInt();
char letterGrade;
if (grade >= 90)
letterGrade = 'A';
else if (grade >= 80)
letterGrade = 'B';
else if (grade >= 70)
letterGrade = 'C';
else if (grade >= 60)
letterGrade = 'D';
else
letterGrade = 'F';
System.out.println("Your grade is " + letterGrade);
যখন সমস্ত বলা হয় এবং হয়ে যায়, কম্পাইলার লেটারগ্র্যাডকে '\ 0' এর একটি ডিফল্ট মান নির্ধারণ করে ধরে নিলে এই কোডটি লিখিত হিসাবে সঠিকভাবে কাজ করবে। তবে, যদি আমরা অন্য বিবৃতিটি ভুলে যাই?
আমাদের কোডে একটি পরীক্ষার রান নিম্নলিখিত ফলাফল হতে পারে
Enter grade
43
Your grade is
এই ফলাফলটি প্রত্যাশিত হওয়ার পরে অবশ্যই কোডারের উদ্দেশ্য ছিল না। প্রকৃতপক্ষে, সম্ভবত বেশিরভাগ ক্ষেত্রে (বা কমপক্ষে একটি উল্লেখযোগ্য সংখ্যা, এর), ডিফল্ট মানটি পছন্দসই মান হবে না , সুতরাং বেশিরভাগ ক্ষেত্রেই ডিফল্ট মানটি ত্রুটির কারণ হতে পারে। এটা ব্যবহার করার পূর্বে একটি স্থানীয় পরিবর্তনশীল একটি প্রাথমিক মান দায়িত্ব অর্পণ করা, বিস্মরণ দ্বারা সৃষ্ট ডিবাগ বিষাদ থেকে সংকেতপদ্ধতিরচয়িতা বলপূর্বক আরো ইন্দ্রিয় তোলে = 1
মধ্যে for(int i = 1; i < 10; i++)
এ পর্যন্ত অন্তর্ভুক্ত করা হচ্ছে না এ সুবিধার outweighs = 0
মধ্যে for(int i; i < 10; i++)
।
এটি সত্য যে চেষ্টা-শেষ অবধি ব্লকগুলি কিছুটা অগোছালো হয়ে উঠতে পারে (তবে এটি উদ্ধৃত হিসাবে মনে হচ্ছে বাস্তবে এটি ক্যাচ -২২ নয়), উদাহরণস্বরূপ যখন কোনও অবজেক্ট তার কনস্ট্রাক্টরে একটি পরীক্ষিত ব্যতিক্রম ছুঁড়ে ফেলে, তবে একটির জন্য কারণ বা অন্য কোনওটি, অবশেষে ব্লকের শেষে এই অবজেক্টটির জন্য কিছু করা উচিত । সম্পদের সাথে কাজ করার সময় এর একটি নিখুঁত উদাহরণ হ'ল যা অবশ্যই বন্ধ করা উচিত।
অতীতে হ্যান্ডেল করার একটি উপায় এর মতো হতে পারে ...
Scanner s = null;
try {
s = new Scanner(new FileInputStream(new File("filename.txt")));
int someInt = s.nextInt();
} catch (InputMismatchException e) {
System.out.println("Some error message");
} catch (IOException e) {
System.out.println("different error message");
} finally {
if (s != null)
s.close();
}
যাইহোক, জাভা 7 হিসাবে, অবশেষে এই জাতীয় ব্লকটি আর চেষ্টা করা উচিত-যেমন-চেষ্টা করে-সংস্থানগুলি ব্যবহার করে।
try (Scanner s = new Scanner(new FileInputStream(new File("filename.txt")))) {
...
...
} catch(IOException e) {
System.out.println("different error message");
}
এটি বলেছিল, (নাম হিসাবে বোঝা যায়) এটি কেবল সংস্থানগুলির সাথে কাজ করে।
যদিও পূর্বের উদাহরণটি কিছুটা ইয়াকি, এটি সম্ভবত চেষ্টা-ধরার চেষ্টা করে বা শেষ পর্যন্ত এই শ্রেণিগুলি প্রয়োগ করা হয় স্থানীয় ভেরিয়েবলগুলি এবং কীভাবে সেগুলি প্রয়োগ করা হয় সে সম্পর্কে বলার অপেক্ষা রাখে না।
এটি সত্য যে ক্ষেত্রগুলি একটি ডিফল্ট মান থেকে শুরু হয় তবে এটি কিছুটা আলাদা। আপনি যখন উদাহরণস্বরূপ বলবেন, int[] arr = new int[10];
আপনি এই অ্যারেটি শুরু করার সাথে সাথে অবজেক্টটি কোনও নির্দিষ্ট স্থানে মেমরিতে উপস্থিত থাকে। আসুন এক মুহুর্তের জন্য ধরে নেওয়া যাক যে কোনও ডিফল্ট মান নেই, তবে পরিবর্তে প্রাথমিক মানটি 1 ম এবং 0 এর যে কোনও সিরিজ এই মুহুর্তে সেই মেমরি লোকেশনে ঘটে। এটি বেশ কয়েকটি ক্ষেত্রে অ-নিরস্তাত্মক আচরণের দিকে পরিচালিত করতে পারে।
মনে করুন আমাদের কাছে ...
int[] arr = new int[10];
if(arr[0] == 0)
System.out.println("Same.");
else
System.out.println("Not same.");
এটি পুরোপুরি সম্ভব হবে যা Same.
এক দৌড়ে Not same.
প্রদর্শিত হতে পারে এবং অন্য কোনওটিতে প্রদর্শিত হতে পারে। আপনি একবার রেফারেন্স ভেরিয়েবলগুলি কথা বলা শুরু করলে সমস্যাটি আরও মারাত্মক হয়ে উঠতে পারে।
String[] s = new String[5];
সংজ্ঞা অনুসারে, s এর প্রতিটি উপাদান একটি স্ট্রিংকে নির্দেশ করা উচিত (বা নাল)। যাইহোক, প্রাথমিক মান যদি 0 ম এবং 1 এর ধারাবাহিকতায় এই মেমরির স্থানে ঘটে থাকে তবে প্রতিবার একই ফলাফল পাবেন এমন কোনও গ্যারান্টি নেই তবে অবজেক্টের [0] পয়েন্টের কোনও গ্যারান্টি নেই to (এটি অর্থপূর্ণ কোনও কিছুর দিকে লক্ষ্য করে) এমনকি এটি একটি স্ট্রিং (সম্ভবত এটি একটি খরগোশ ,: পি )! প্রকারের জন্য উদ্বেগের এই অভাবটি জাভা জাভা তৈরি করে এমন অনেক কিছুর মুখে উড়ে যাবে। সুতরাং স্থানীয় ভেরিয়েবলের জন্য ডিফল্ট মানগুলি সর্বোত্তমভাবে alচ্ছিক হিসাবে দেখা যেতে পারে, উদাহরণস্বরূপ ভেরিয়েবলগুলির জন্য ডিফল্ট মানগুলি একটি প্রয়োজনীয়তার কাছাকাছি ।