একটি ব্যতিক্রম একটি ব্লকিং ত্রুটি ।
প্রথমত, সর্বোত্তম অনুশীলনটি হওয়া উচিত কোনও ধরণের ত্রুটির জন্য ব্যতিক্রম ছোঁড়া উচিত নয়, যদি না এটি একটি ব্লকিং ত্রুটি ।
ত্রুটি যদি অবরুদ্ধ হয় তবে ব্যতিক্রমটি ছুঁড়ে দিন। ব্যতিক্রমটি ইতিমধ্যে ছুঁড়ে ফেলা হলে, এটি আড়াল করার দরকার নেই কারণ এটি ব্যতিক্রম; ব্যবহারকারীকে এটি সম্পর্কে জানাতে দিন (ইউআই-তে থাকা ব্যবহারকারীকে দরকারী কিছুতে পুরো ব্যতিক্রমটি পুনরায় ফর্ম্যাট করা উচিত)।
সফটওয়্যার বিকাশকারী হিসাবে আপনার কাজটি একটি ব্যতিক্রমী কেস প্রতিরোধ করার প্রচেষ্টা করা যেখানে কোনও ব্যতিক্রমের মধ্যে কিছু পরামিতি বা রানটাইম পরিস্থিতি শেষ হতে পারে। অর্থাৎ ব্যতিক্রম নিঃশব্দ করা আবশ্যক, কিন্তু এই অবশ্যই এড়িয়ে চলতে হবে ।
উদাহরণস্বরূপ, যদি আপনি জানেন যে কিছু পূর্ণসংখ্যার ইনপুটটি একটি অবৈধ ফর্ম্যাট নিয়ে আসতে পারে তবে তার int.TryParse
পরিবর্তে ব্যবহার করুন int.Parse
। এমন অনেকগুলি ঘটনা রয়েছে যেখানে আপনি "যদি এটি ব্যর্থ হয় তবে কেবল একটি ব্যতিক্রম ছুঁড়ে" বলার পরিবর্তে এটি করতে পারেন।
ব্যতিক্রম ছোঁড়া ব্যয়বহুল।
যদি সর্বোপরি, কোনও ব্যতিক্রম ছুঁড়ে দেওয়া হয়, একবার ছুঁড়ে ফেলা হলে লগের ব্যতিক্রমটি লেখার পরিবর্তে, সেরা অনুশীলনগুলির মধ্যে একটি এটি প্রথম-সম্ভাবনার ব্যতিক্রম হ্যান্ডলারটিতে ধরা হয় । উদাহরণ স্বরূপ:
- এএসপি.এনইটি : গ্লোবাল.অ্যাস্যাক্স অ্যাপ্লিকেশন_রর
- অন্যান্য: অ্যাপডোমাইন.ফার্সচেঞ্জ এক্সেপশন ইভেন্ট ।
আমার অবস্থান হ'ল স্থানীয় চেষ্টা / ক্যাচগুলি বিশেষ কেসগুলি পরিচালনা করার জন্য আরও উপযুক্ত where কোনও ত্রুটিযুক্ত ব্যতিক্রম ছড়িয়ে দেওয়া যা পুরো বাগটিটি কার্যকর করতে আপনাকে নিঃশব্দ করা প্রয়োজন)।
বাকি মামলার জন্য:
- ব্যতিক্রম এড়ানোর চেষ্টা করুন।
- যদি এটি সম্ভব না হয়: প্রথম-সুযোগ ব্যতিক্রম হ্যান্ডলার।
- অথবা একটি পোস্টশার্প দিক (এওপি) ব্যবহার করুন।
কিছু মন্তব্যে @ সাদাবাইটকে উত্তর দিচ্ছি ...
@ হোয়াইটাম্বিট বলেছেন:
ব্যতিক্রমগুলি মারাত্মক ত্রুটি নয়, তারা ব্যতিক্রম! কখনও কখনও তারা ত্রুটিও হয় না, তবে তাদের মারাত্মক-ত্রুটিগুলি বিবেচনা করা ব্যতিক্রমগুলি কী তা সম্পূর্ণ মিথ্যা বোঝা।
প্রথমত, কিভাবে একটি ব্যতিক্রম এমনকি ত্রুটি হতে পারে না?
- কোনও ডাটাবেস সংযোগ => ব্যতিক্রম নয়।
- কিছু টাইপ => ব্যতিক্রমকে বিশ্লেষণ করতে অবৈধ স্ট্রিং ফর্ম্যাট
- জেএসএনকে বিশ্লেষণ করার চেষ্টা করছে এবং ইনপুট আসলে জেএসওএন => ব্যতিক্রম নয়
- আর্গুমেন্ট
null
যখন বস্তুর আশা ছিল => ব্যতিক্রম
- কিছু লাইব্রেরিতে একটি বাগ => রয়েছে অপ্রত্যাশিত ব্যতিক্রম
- এখানে একটি সকেট সংযোগ রয়েছে এবং এটি সংযোগ বিচ্ছিন্ন হয়ে যায়। তারপরে আপনি কোনও বার্তা => ব্যতিক্রম প্রেরণের চেষ্টা করবেন
- ...
যখন একটি ব্যতিক্রম নিক্ষিপ্ত হয় 1k মামলা তালিকা পারে এবং সব পরে, সম্ভব মামলার কোনো হতে হবে একটি ত্রুটি ।
ব্যতিক্রম হয় , একটি ত্রুটি কারণ দিনের শেষে এটা একটা বস্তুর ডায়গনিস্টিক তথ্য সংগ্রহ - এটা একটি বার্তা রয়েছে এবং এটি ঘটে যখন কিছু গোলমাল হয়।
ব্যতিক্রমী মামলা না হলে কেউই ব্যতিক্রম ছুঁড়ে মারবে না। ব্যতিক্রমগুলি ত্রুটিগুলি ব্লক করা উচিত কারণ তারা একবার ছুঁড়ে ফেলা হয়, আপনি যদি নিয়ন্ত্রণ প্রবাহ প্রয়োগ করার চেষ্টা / ধরা এবং ব্যাতিক্রমের মধ্যে পড়ার চেষ্টা না করেন তবে তার অর্থ আপনার অ্যাপ্লিকেশন / পরিষেবাটি ব্যতিক্রমী ক্ষেত্রে প্রবেশকারী ক্রিয়াকলাপটি বন্ধ করে দেবে ।
এছাড়াও, আমি সবাইকে মার্টিন ফওলারের (এবং জিম শোর দ্বারা লিখিত) প্রকাশিত ব্যর্থ-দ্রুত দৃষ্টান্তটি পরীক্ষা করার পরামর্শ দিচ্ছি । কিছুক্ষণ আগে এই দস্তাবেজটিতে আসার আগেই আমি ব্যতিক্রমগুলি কীভাবে পরিচালনা করব তা এইভাবেই বুঝি।
[...] তাদের বিবেচনা করুন মারাত্মক ত্রুটিগুলি ব্যতিক্রমগুলি কী তা সম্পূর্ণ মিথ্যা বোঝা।
সাধারণত ব্যতিক্রম কিছু অপারেশন প্রবাহকে হ্রাস করে এবং এগুলি মানব-বোধগম্য ত্রুটিতে রূপান্তর করতে পরিচালিত হয়। সুতরাং, মনে হয় এটির ব্যতিক্রম হ'ল ত্রুটি কেসগুলি পরিচালনা করা এবং কোনও অ্যাপ্লিকেশন / পরিষেবা সম্পূর্ণ ক্র্যাশ এড়ানোর জন্য এবং ব্যবহারকারী / গ্রাহককে কিছু ভুল হয়েছে সে সম্পর্কে অবহিত করার জন্য সেগুলির উপরে কাজ করার জন্য একটি ভাল দৃষ্টান্ত।
@TheWitembit উদ্বেগ সম্পর্কে আরও উত্তর
উদাহরণস্বরূপ, অনুপস্থিত ডাটাবেস-সংযোগের ক্ষেত্রে প্রোগ্রামটি স্থানীয় ফাইলে লেখার সাথে ব্যতিক্রমীভাবে চালিয়ে যেতে পারে এবং এটি আবার উপলভ্য হয়ে গেলে ডাটাবেজে পরিবর্তনগুলি প্রেরণ করতে পারে। আপনার অবৈধ স্ট্রিং-টু-নম্বর কাস্টিংটিকে ব্যতিক্রমের ক্ষেত্রে ভাষা-স্থানীয় ব্যাখ্যা দিয়ে আবার পার্স করার চেষ্টা করা যেতে পারে, যেমন আপনি পার্স ("1,5") এর ডিফল্ট ইংরেজি ভাষার চেষ্টা করে ব্যর্থ হন এবং আপনি আবার এটি আবার জার্মান ব্যাখ্যার সাথে চেষ্টা করে যা সম্পূর্ণরূপে ঠিক আছে কারণ আমরা বিভাজক হিসাবে বিন্দু পরিবর্তে কমা ব্যবহার করি। আপনি দেখেন যে এই ব্যতিক্রমগুলি অবশ্যই ব্লক করা উচিত নয়, তাদের কেবল কিছু ব্যতিক্রম-হ্যান্ডলিং দরকার।
যদি আপনার অ্যাপ্লিকেশনটি ডেটাবেজে ডেটা না দিয়ে অফলাইনে কাজ করতে পারে তবে আপনার ব্যতিক্রমগুলি ব্যবহার করা উচিত নয় , কারণ try/catch
এটি ব্যবহার করে নিয়ন্ত্রণ প্রবাহকে একটি অ্যান্টি-প্যাটার্ন হিসাবে বিবেচনা করা হয়। অফলাইন কাজ একটি সম্ভাব্য ব্যবহারের ক্ষেত্রে, তাই ডাটাবেস অ্যাক্সেসযোগ্য কিনা তা পরীক্ষা করতে আপনি নিয়ন্ত্রণ প্রবাহটি প্রয়োগ করেন, এটি অ্যাক্সেসযোগ্য না হওয়া পর্যন্ত আপনি অপেক্ষা করবেন না ।
পার্সিং জিনিস এছাড়াও একটি প্রত্যাশিত ক্ষেত্রে (হয় ব্যতিক্রমী না ক্ষেত্রে )। আপনি যদি এটি আশা করেন, আপনি নিয়ন্ত্রণ প্রবাহ করতে ব্যতিক্রম ব্যবহার করবেন না! । তার সংস্কৃতিটি কী তা জানতে আপনি ব্যবহারকারীর কাছ থেকে কিছু মেটাডেটা পান এবং আপনি এর জন্য বিন্যাস ব্যবহার করেন! .NET এটি এবং অন্যান্য পরিবেশকেও সমর্থন করে এবং একটি ব্যতিক্রম কারণ আপনি যদি নিজের অ্যাপ্লিকেশন / পরিষেবাদির সংস্কৃতি-নির্দিষ্ট ব্যবহারের আশা করেন তবে নম্বর ফর্ম্যাটিং এড়ানো উচিত ।
একটি অযথিত ব্যতিক্রম সাধারণত একটি ত্রুটি হয়ে যায়, তবে ব্যতিক্রমগুলি নিজেই কোডড্রজেক্ট নয় / আর্টিকেলগুলি / 15921/ নয়- সব- এক্সেক্সশনস -আর- ত্রুটিগুলি
এই নিবন্ধটি কেবল লেখকের মতামত বা দৃষ্টিভঙ্গি।
উইকিপিডিয়া যেহেতু কেবলমাত্র লেখক (গুলি) এর লেখকের মতামত হতে পারে, তাই আমি এটি কৌতূহল বলব না , তবে ব্যতিক্রমী নিবন্ধে কোডিং কোথাও কিছু অনুচ্ছেদে বলেছে তা পরীক্ষা করে দেখুন :
[...] প্রোগ্রামটি চালিয়ে যাওয়ার জন্য উদ্ভূত নির্দিষ্ট ত্রুটিগুলি পরিচালনা করতে এই ব্যতিক্রমগুলি ব্যবহার করা ব্যতিক্রমকে কোডিং বলে। এই অ্যান্টি-প্যাটার্নটি কার্য সম্পাদন এবং রক্ষণাবেক্ষণে সফ্টওয়্যারটিকে দ্রুত হ্রাস করতে পারে।
এটি কোথাও বলে:
ভুল ব্যতিক্রম ব্যবহার
প্রায়শই ব্যতিক্রম ব্যতীত কোডিং ভুল সফটওয়্যারটিতে ভুল ব্যতিক্রম ব্যবহারের সাথে আরও সমস্যার কারণ হতে পারে। একটি অনন্য সমস্যার জন্য ব্যতিক্রম হ্যান্ডলিং ব্যবহার করা ছাড়াও, ব্যতিক্রম উত্থাপিত হওয়ার পরেও ভুল ব্যতিক্রম ব্যবহার কোড প্রয়োগ করে আরও এটিকে নিয়ে যায়। এই দুর্বল প্রোগ্রামিং পদ্ধতিটি অনেকগুলি সফ্টওয়্যার ভাষায় গোটো পদ্ধতির সাথে সাদৃশ্যযুক্ত তবে কেবল সফ্টওয়্যারটিতে একটি সমস্যা সনাক্ত হওয়ার পরে ঘটে।
সত্য, আমি বিশ্বাস করি যে সফটওয়্যার বিকাশ করা যায় না ব্যবহারের ক্ষেত্রে গুরুত্বের সাথে গ্রহণ করবেন না। যদি আপনি এটি জানেন ...
- আপনার ডাটাবেস অফলাইনে যেতে পারে ...
- কিছু ফাইল লক করা যেতে পারে ...
- কিছু ফর্ম্যাটিং সমর্থিত নাও হতে পারে ...
- কিছু ডোমেন বৈধতা ব্যর্থ হতে পারে ...
- আপনার অ্যাপ্লিকেশনটি অফলাইন মোডে কাজ করা উচিত ...
- যাই হোক না কেন ব্যবহার ক্ষেত্রে ...
... আপনি এর জন্য ব্যতিক্রম ব্যবহার করবেন না । আপনি নিয়মিত নিয়ন্ত্রণ প্রবাহ ব্যবহার করে এই ব্যবহারের ক্ষেত্রে সমর্থন করবেন ।
এবং যদি কিছু অপ্রত্যাশিত ব্যবহারের ক্ষেত্রে আচ্ছাদিত না হয় তবে আপনার কোডটি দ্রুত ব্যর্থ হবে, কারণ এটি একটি ব্যতিক্রম ছুঁড়ে দেবে । ঠিক আছে, কারণ একটি ব্যতিক্রম একটি ব্যতিক্রমী ক্ষেত্রে ।
অন্য হাতে, এবং পরিশেষে, কখনও কখনও আপনি আবরণ ব্যতিক্রমী ক্ষেত্রে নিক্ষেপ প্রত্যাশিত ব্যতিক্রম , কিন্তু আপনি নিয়ন্ত্রণ প্রবাহ বাস্তবায়ন তাদের ফেলবেন না। আপনি এটি করেন কারণ আপনি উপরের স্তরগুলিকে অবহিত করতে চান যে আপনি কিছু ব্যবহারের ক্ষেত্রে সমর্থন করেন না বা আপনার কোড কিছু প্রদত্ত যুক্তি বা পরিবেশের ডেটা / বৈশিষ্ট্যগুলির সাথে কাজ করতে ব্যর্থ।