ব্যতিক্রম নিক্ষেপ বনাম জোর ব্যবহার?


38

প্রায়শই আমি যখন কোনও ফাংশন লিখি তখন যত তাড়াতাড়ি সম্ভব ত্রুটি সনাক্ত করার জন্য এটির ইনপুটগুলি বৈধ কিনা তা নিশ্চিত করতে চাই (আমি বিশ্বাস করি এগুলিকে পূর্বশর্ত বলা হয়)। যখন কোনও পূর্বশর্ত ব্যর্থ হয়, আমি সর্বদা একটি ব্যতিক্রম ছুঁড়ে ফেলেছি। তবে আমি সন্দেহ শুরু করছি যে এটি সর্বোত্তম অনুশীলন কিনা এবং যদি না বলা হয় তবে আরও উপযুক্ত হবে।

সুতরাং আমার কখন কী করা উচিত: কখন একটি দৃ use়তা ব্যবহার করা উপযুক্ত এবং কখন ব্যতিক্রম ছুঁড়ে ফেলা উপযুক্ত?


3
আমি মনে করি এই প্রশ্নটি স্ট্যাকওভারফ্লোতে জিজ্ঞাসা করা উচিত, যদিও এটি সম্ভবত সেখানে কয়েক ডজন জিজ্ঞাসা করা হয়েছে, সুতরাং আপনি ইতিমধ্যে সেখানে অনেক উত্তর খুঁজে পেতে পারেন।
ব্যবহারকারী 281377

উত্তর:


50

যুক্তিগুলি কেবল এমন শর্তাদি যাচাই করতে ব্যবহার করা উচিত যেগুলি মিথ্যা হতে যৌক্তিকভাবে অসম্ভব হওয়া উচিত (পড়ুন: স্যানিটি চেক)। এই শর্তাদি কেবল আপনার নিজের কোড দ্বারা উত্পাদিত ইনপুট উপর ভিত্তি করে করা উচিত। বাহ্যিক ইনপুট উপর ভিত্তি করে যে কোনও চেক ব্যতিক্রম ব্যবহার করা উচিত।

একটি সাধারণ নিয়ম যা আমি অনুসরণ করি তা হ'ল দৃ functions়তার সাথে ব্যক্তিগত ফাংশনগুলির যুক্তিগুলি যাচাই করা, এবং পাবলিক / সুরক্ষিত ফাংশনগুলির জন্য ব্যতিক্রমগুলি ব্যবহার করা 'যুক্তিগুলি।


বাহ্যিক ইনপুট জন্য ব্যতিক্রম ব্যবহার সম্পর্কে ভাল পয়েন্ট। আমি
এটিতে আউটপুটগুলিও যুক্ত করব

13
এবং অনিবার্যভাবে আপনি এই দাবীগুলি উত্পাদনের দিকে চালিত হতে দেখবেন। জমিদারি সহ প্রাইভেট স্টাফ যাচাই করার জন্য +1 ! হতে পারে আপনি "ইনপুটগুলির সম্পূর্ণ নিয়ন্ত্রণে থাকাকালীন অ্যাসেটস ব্যবহার করুন" বলতে পারেন?
ফ্র্যাঙ্ক শায়ারার

1
জাভাতে, কমপক্ষে, আপনাকে সাধারণত -ea কমান্ড লাইন প্যারামিটারের সাথে দৃ check়তা পরীক্ষা করতে হবে। এর অর্থ হ'ল দৃser়ভাবে কার্যকরভাবে কোনও বিকল্প নেই, যদি না আপনি এগুলি স্পষ্টভাবে চালু করেন।
বিল মিশেল

29

প্রোগ্রামিং ত্রুটিগুলি অনুসন্ধান করার জন্য দৃser়তা ব্যবহৃত হয়। যখন সমস্ত দাবিগুলি অপসারণ করা হয় তখন আপনার প্রোগ্রামগুলিকে অবশ্যই কাজ করা উচিত।

অন্যদিকে, ব্যতিক্রমগুলি এমন পরিস্থিতিতে রয়েছে যা প্রোগ্রামটি নিখুঁত হওয়ার পরেও ঘটতে পারে; এগুলি হার্ডওয়্যার, নেটওয়ার্ক, ব্যবহারকারী ইত্যাদির মতো বাহ্যিক প্রভাব দ্বারা সৃষ্ট are


এটি লাগানোর জন্য এটি একটি দুর্দান্ত উপায়। যদি ব্যবহারকারী কিছু ভুল করে দেয় তবে একটি ব্যতিক্রম ছুঁড়ে দিন। যদি ইনপুটটি সঠিক হয় তবে কিছু এখনও ভুল হয় তবে একটি প্রতিস্থাপন নিক্ষেপ করুন।
মতিন উলহাক

3

টিপিক্যাল প্রোগ্রামিং অনুশীলন হ'ল উত্পাদন / রিলিজ বিল্ডগুলি থেকে দৃser় প্রতিবেদনগুলি সংকলন করা। অনুমানগুলি ব্যর্থতা ধরার জন্য অভ্যন্তরীণ পরীক্ষার সময় জোর দিয়ে সহায়তা করবে। আপনার বাহ্যিক সংস্থাগুলির আচরণ অনুমান করা উচিত নয়, সুতরাং আপনার নেটওয়ার্ক বা ব্যবহারকারীর ইভেন্টগুলিতে দৃsert়তা দেওয়া উচিত নয়। এছাড়াও যদি দৃ as়তা ব্যর্থ হয় তবে উত্পাদনের জন্য হ্যান্ডলিং কোড লেখার পক্ষে একটি ভাল অনুশীলন।

সি হিসাবে উদাহরণস্বরূপ,

int printf(const char *fmt, ...)
{
  assert(fmt);  // may fail in debug build but not in production build
  if (!fmt) return -1; // handle gracefully in production build
  ...
}

ব্যতিক্রমগুলি উত্পাদন বিল্ডগুলিতে অন্তর্নিহিত বোঝানো। ব্যতিক্রমের বিকল্প হ'ল ত্রুটি ফিরিয়ে আনা এবং জোর দেওয়া নয়।


2
আমি মনে করি না যে একই অবস্থার জন্য দৃ behind়তার পিছনে কৌতূহলপূর্ণ আচরণ করা ভাল ধারণা idea অনিবার্যভাবে, কারণ গ্রেফিউল আচরণটি কেবল উত্পাদন সংস্করণে বিদ্যমান, যে কোডটি করুণাময় আচরণের সাথে আচরণ করার কথা ছিল তা খারাপভাবে পরীক্ষা করা হবে এবং ক্র্যাশ হবে ঠিক তত খারাপ, যদি কোডটি সুরক্ষিত না করা হত।
সেবাস্তিয়ান রেডল

0

আমার পক্ষে দৃser়তার সাথে একটি সমস্যা হ'ল তারা জাভাতে ডিফল্টরূপে অক্ষম।

আমরা একটি ব্যর্থ-প্রথম কৌশলটি ব্যবহার করি যেখানে প্রোগ্রামটি - যা বছরের পর বছর ধরে অপ্রত্যাশিত চলছে - খারাপ ডেটার ক্ষেত্রে (অপ্রত্যাশিত ফর্মের ক্ষেত্রে) ডেটা দুর্নীতি এড়াতে যত তাড়াতাড়ি সম্ভব ক্রাশ হওয়া দরকার। এটি আমরা যা যাচাই করে নিই এবং এ্যাসেটগুলি ব্যবহার করে আমরা মূলত তাদের সক্রিয় না হওয়ার ঝুঁকি নিয়ে থাকি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.