এর জন্য জাভা মামলার সুনির্দিষ্ট বিবরণগুলি (যা সম্ভবত সি # কেসের সাথে খুব মিল রয়েছে) জাভা সংকলক কীভাবে কোনও পদ্ধতিতে ফিরে আসতে সক্ষম কিনা তা নির্ধারণ করে with
বিশেষ করে, নিয়ম আছে যে একটি রিটার্ন টাইপ সঙ্গে একটি পদ্ধতি করতে সক্ষম নাও হতে হবে স্বাভাবিকভাবে সম্পন্ন এবং এর পরিবর্তে সবসময় সম্পূর্ণ করতে হবে আচমকা (হঠাৎ এখানে একটি ফিরতি বিবৃতি অথবা একটি ব্যতিক্রম মাধ্যমে ইঙ্গিত) প্রতি JLS 8.4.7 ।
যদি কোনও পদ্ধতির রিটার্নের ধরণ হিসাবে ঘোষণা করা হয়, তবে পদ্ধতিটির শরীরে স্বাভাবিকভাবে সম্পূর্ণ করতে পারলে একটি সংকলন-সময় ত্রুটি ঘটে। অন্য কথায়, একটি রিটার্ন টাইপ সহ একটি পদ্ধতি অবশ্যই একটি রিটার্ন স্টেটমেন্ট ব্যবহার করে ফিরে আসতে হবে যা একটি মান ফেরত সরবরাহ করে; এটিকে "এর শরীরের শেষটি ফেলে দেওয়ার" অনুমতি দেওয়া হয় না ।
সংকলক জেএলএস 14.21 অ্যাক্সেসযোগ্য বিবৃতিতে সংজ্ঞায়িত নিয়মের উপর ভিত্তি করে সাধারণ সমাপ্তি সম্ভব কিনা তা দেখতে পারা যায় কারণ এটি সাধারণ সমাপ্তির জন্য বিধিগুলিও সংজ্ঞায়িত করে।
উল্লেখযোগ্যভাবে, অ্যাক্সেসযোগ্য বক্তব্যগুলির নিয়মগুলি কেবল এমন লুপগুলির জন্য বিশেষ কেস তৈরি করে যাগুলির একটি সংজ্ঞায়িত true
ধ্রুবক প্রকাশ থাকে:
নীচে অন্তত একটি সত্য হলে বিবৃতিটি সাধারণত সম্পূর্ণ হতে পারে:
সুতরাং যদি while
বিবৃতিটি স্বাভাবিকভাবে সম্পূর্ণ হতে পারে , তবে কোডটির নীচে পৌঁছনীয় বলে বিবেচিত হওয়ায় এর নীচে একটি রিটার্ন স্টেটমেন্ট প্রয়োজনীয়, এবং কোনও while
অ্যাক্সেসযোগ্য ব্রেক স্টেটমেন্ট বা ধ্রুবক true
অভিব্যক্তি ছাড়াই যে কোনও লুপ সাধারণভাবে সম্পূর্ণ করতে সক্ষম হিসাবে বিবেচিত হবে।
এই বিধিগুলির অর্থ হ'ল while
স্থির সত্যিকারের মত প্রকাশের সাথে এবং একটি ছাড়া আপনার বক্তব্যটিকে কখনই সাধারণত সম্পূর্ণরূপে বিবেচনা করাbreak
হয় না এবং সুতরাং এর নীচে কোনও কোড কখনওই পৌঁছনীয় বলে বিবেচিত হয় না । পদ্ধতির শেষটি লুপের নীচে, এবং যেহেতু লুপের নীচে সমস্ত কিছু অ্যাক্সেসযোগ্য হয়, তেমনি পদ্ধতির সমাপ্তি হয়, এবং এভাবে পদ্ধতিটি সম্ভবত সাধারণত সম্পূর্ণরূপে সম্পন্ন করতে পারে না (যা কম্পাইলার সন্ধান করে এটি)।
if
অন্যদিকে বিবৃতিগুলিতে লুপকে সাশ্রয়ী ধ্রুবক অভিব্যক্তি সম্পর্কিত বিশেষ ছাড় নেই tion
তুলনা করা:
// I have a compiler error!
public boolean testReturn()
{
final boolean condition = true;
if (condition) return true;
}
সঙ্গে:
// I compile just fine!
public boolean testReturn()
{
final boolean condition = true;
while (condition)
{
return true;
}
}
পার্থক্যের কারণটি বেশ আকর্ষণীয় এবং এটি শর্তাধীন সংকলন পতাকাগুলির জন্য অনুমতি দেওয়ার আকাঙ্ক্ষার কারণে যা সংকলক ত্রুটিগুলি তৈরি করে না (জেএলএস থেকে):
কেউ যদি এই বিবৃতিটি নিম্নলিখিত পদ্ধতিতে পরিচালনা করবেন বলে আশা করতে পারে:
নীচে অন্তত একটি সত্য যদি if-then বিবৃতিটি সাধারণত সম্পূর্ণ করতে পারে:
তদ্বির-বিবৃতিটি যদি পৌঁছনো হয় তবে যদি বিবৃতিটি পৌঁছনীয় হয় এবং শর্তটি প্রকাশটি একটি ধ্রুবক প্রকাশ নয় যার মানটি মিথ্যা।
যদি-তারপর-অন্য বিবৃতিটি স্বাভাবিকভাবে সম্পূর্ণ করতে পারে যদি তফতুর-বিবৃতিটি স্বাভাবিকভাবে সম্পূর্ণ করতে পারে বা অন্য-বিবৃতিটি সাধারণত সম্পূর্ণ করতে পারে।
যদি-তবে-অন্য বিবৃতিটি পৌঁছনীয় হয় তবে তারপরে বিবৃতিটি পৌঁছনীয় এবং শর্তটি প্রকাশটি একটি ধ্রুবক প্রকাশ নয় যার মানটি মিথ্যা।
অন্য-বিবৃতিটি যদি পৌঁছনো হয় তবে যদি-তবে-অন্য বিবৃতিটি পৌঁছনীয় হয় এবং শর্তটি প্রকাশ কোনও ধ্রুবক প্রকাশ নয় যার মান সত্য।
এই পদ্ধতিটি অন্যান্য নিয়ন্ত্রণ কাঠামোর চিকিত্সার সাথে সামঞ্জস্যপূর্ণ হবে। তবে, "শর্তসাপেক্ষ সংকলন" উদ্দেশ্যে যদি বিবৃতিটি সুবিধামত ব্যবহারের অনুমতি দেওয়ার জন্য, আসল বিধিগুলি পৃথক করে।
উদাহরণস্বরূপ, নিম্নলিখিত বিবৃতিটি একটি সংকলন-সময় ত্রুটির ফলাফল করে:
while (false) { x=3; }
কারণ বিবৃতিটি x=3;
পৌঁছনীয় নয়; কিন্তু অতিমাত্রায় অনুরূপ ক্ষেত্রে:
if (false) { x=3; }
একটি সংকলন-সময় ত্রুটির ফলে না। একটি অনুকূলকরণ সংকলক বুঝতে পারে যে বিবৃতিটি x=3;
কখনই কার্যকর হবে না এবং উত্পন্ন শ্রেণিবদ্ধ ফাইল থেকে এই বিবৃতিটির কোড বাদ দিতে পারে, তবে x=3;
এখানে বর্ণিত প্রযুক্তিগত অর্থে বিবৃতিটিকে "অ্যাক্সেসযোগ্য" হিসাবে বিবেচনা করা হয় না।
এই পৃথক পৃথক চিকিত্সার যুক্তি হ'ল প্রোগ্রামারদের "পতাকা চলক" সংজ্ঞায়িত করার অনুমতি দেওয়া যেমন:
static final boolean DEBUG = false;
এবং তারপরে কোড লিখুন যেমন:
if (DEBUG) { x=3; }
ধারণাটি হ'ল ডিইবিইউগির মানটি মিথ্যা থেকে সত্যে বা সত্য থেকে মিথ্যাতে পরিবর্তন করা এবং প্রোগ্রামের পাঠ্যে অন্য কোনও পরিবর্তন ছাড়াই কোডটি সঠিকভাবে সংকলন করা উচিত।
শর্তসাপেক্ষ বিরতির বিবৃতি সংকলক ত্রুটির ফলে কেন ঘটে?
লুপের পুনঃব্যবহারযোগ্যতা বিধিগুলিতে উদ্ধৃত হিসাবে কিছুক্ষণের মধ্যে লুপটি সম্পূর্ণরূপে সম্পূর্ণ করতে পারে যদি এটিতে একটি অ্যাক্সেসযোগ্য ব্রেক স্টেটমেন্ট থাকে। যেহেতু if
বিবৃতিটির তত্কালীন ধারাটির পুনঃব্যবহারযোগ্যতার জন্য বিধিগুলি শর্তটিকে মোটেও if
বিবেচনা করে না, এই জাতীয় শর্তাধীন if
বিবৃতিটির তত্কালীন ধারাটি সর্বদা পৌঁছনীয় বলে বিবেচিত হয়।
যদি এটি break
যদি অ্যাক্সেসযোগ্য হয়, তবে লুপের পরে কোডটি আবারও অ্যাক্সেসযোগ্য হিসাবে বিবেচিত হবে। যেহেতু কোনও অ্যাক্সেসযোগ্য কোড নেই যা লুপের পরে আকস্মিক সমাপ্তির ফলস্বরূপ, পদ্ধতিটি তখন সাধারণভাবে সম্পূর্ণ করতে সক্ষম হিসাবে বিবেচিত হয় এবং তাই সংকলকটি এটিকে ত্রুটি হিসাবে চিহ্নিত করে।