ব্যতিক্রম কেন পরিচালনা খারাপ?


90

গুগলের গো ল্যাঙ্গুয়েজের ডিজাইন পছন্দ হিসাবে কোনও ব্যতিক্রম নেই এবং লিনাক্স খ্যাত লিনাস ব্যতিক্রমকে বাজে কথা বলেছে। কেন?


4
জিরো কিউয়ের নির্মাতা তিনি কীভাবে সি ++ এ লিখতে ভুল করেছিলেন বলে লিখেছেন (বেশিরভাগ ক্ষেত্রে ত্রুটি পরিচালনার কারণে) 250bpm.com/blog:4
serbut

গো-এর ব্যতিক্রম নাও থাকতে পারে, তবে এর "আতঙ্ক" রয়েছে যা থেকে আপনি "পুনরুদ্ধার" করতে পারেন (যদিও পিছিয়ে দেওয়া বিবৃতিগুলি কার্যকর করা হয়) এবং এটি অ-স্থানীয় নিয়ন্ত্রণ প্রবাহ সরবরাহ করে ...
কেরেক এসবি

এখানে একটি সুন্দর নিবন্ধটি লাইট্রা / পেপারস / এক্সেকশনশর্মুল (ব্যতিক্রম হ্যান্ডলিং বিবেচিত ক্ষতিকারক হিসাবে বিবেচনা করা হয়েছে)
মাস্টারেক্সিলো

আফিক্স, ব্যতিক্রমগুলি উল্লেখযোগ্য বয়লারপ্লেটের সাথে গোতে অনুকরণ করা যায় , যদিও এই পয়েন্টটি ম্যানুয়ালি বয়লারপ্লেট লেখার চেয়ে সিনট্যাক্স চিনির থেকে স্থানান্তরিত করার জন্য আরও অর্থবহ হতে পারে।
শেলবি মুর তৃতীয়

উত্তর:


83

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

এরকম কিছুকে সাধারণ উদাহরণ হিসাবে বিবেচনা করুন:

class Frobber
{
    int m_NumberOfFrobs;
    FrobManager m_FrobManager;

public:
    void Frob()
    {
        m_NumberOfFrobs++;

        m_FrobManager.HandleFrob(new FrobObject());
    }
};

ধরে নেওয়া যাক FrobManagerহবে , এই সৌন্দর্য ঠিক আছে, ঠিক আছে? বা নাও হতে পারে ... তাহলে ভাবুন যদি হয় বা ব্যতিক্রম ছোঁড়ে। এই উদাহরণে, ইনক্রিমেন্টটি পিছনে ফিরে আসে না। সুতরাং, যে কেউ এর উদাহরণ ব্যবহার করে তার সম্ভবত একটি দূষিত বস্তু থাকতে চলেছে।deleteFrobObjectFrobManager::HandleFrob()operator newm_NumberOfFrobsFrobber

এই উদাহরণটি নির্বোধ বলে মনে হতে পারে (ঠিক আছে, একটি :-) নির্মাণের জন্য আমাকে নিজেকে কিছুটা প্রসারিত করতে হয়েছিল), তবে, গ্রহণযোগ্যতাটি হ'ল যদি কোনও প্রোগ্রামার নিয়মিতভাবে ব্যতিক্রম সম্পর্কে চিন্তা না করে এবং রাষ্ট্রের প্রতিটি ক্রমবিন্যাস ঘূর্ণিত হয় তা নিশ্চিত করে তোলে ফিরে যখনই ছুড়ে দেওয়া হয়, আপনি এইভাবে সমস্যায় পড়বেন।

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

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

সি ++ এ ব্যতিক্রমী নিরাপদ কোডিং সম্পর্কে সমস্ত বই লেখা হয়েছে। অনেক বিশেষজ্ঞ এটি ভুল পেয়েছে। যদি এটি সত্যিই জটিল এবং এর মধ্যে অনেকগুলি স্নিগ্ধতা থাকে তবে এটি সম্ভবত একটি ভাল চিহ্ন যা আপনার সেই বৈশিষ্ট্যটি উপেক্ষা করার দরকার। :-)


9
আকর্ষণীয় উত্তর, তবে এটি আমার প্রোগ্রামিং অভিজ্ঞতায় কিছু প্রতিবিম্বিত করে না। সুতরাং আমি অনুমান করি এটি হয় সংস্কৃতি-নির্দিষ্ট (জাভা বা সি ++ এর চেয়ে আরও বেশি সমস্যা, বলুন, পাইথনের চেয়ে বেশি) বা ডোমেন-নির্দিষ্ট।
ddaa

42
চেষ্টা-শেষের প্যাটার্নটি ব্যবহার করে পরিচালিত ভাষায় লিখিত ব্যতিক্রমগুলি যথাযথভাবে লিখিত থাকলে অবৈধ অবস্থা কখনই ছেড়ে দেওয়া উচিত নয়; যেহেতু অবশেষে ব্লকটি কার্যকর করার গ্যারান্টিযুক্ত তাই অবজেক্টগুলি সেখানে বিলোপযুক্ত হতে পারে। বাকিগুলি ভ্যারিয়েবলের সুযোগ এবং আবর্জনা সংগ্রহের বাইরে গিয়ে যত্ন নেওয়া উচিত।
রবার্ট হার্ভে

7
@ ডিডিএ পাইথনে ইস্যুটি অবশ্যই সম্ভব। ফলটি সাধারণত বাগ প্রজনন করা একটি কঠিন। সম্ভবত আপনি বিশেষত নিখুঁত বা ভাগ্যবান হয়েছেন। তবে, আপনি ঠিক বলেছেন যে এটি সি +++ এর আরও একটি বিষয়, যেখানে দরিদ্র EH থেকে সর্বাধিক সাধারণ বাগটি মেমরি ফুটো। আমি জোর দেওয়ার চেষ্টা করেছি যে ফাঁস সবচেয়ে গুরুতর সমস্যা নয়। @ রবার্ট জিসি মেমরি ফাঁস প্রশমিত করবে, তবে আমি নিশ্চিত নই যে পরিচালিত কোড আপনাকে প্রোগ্রামার ত্রুটি থেকে মুক্ত করবে। বিশেষত যদি কেউ ব্যতিক্রমী সুরক্ষার দিকে মনোযোগ দিচ্ছে না কারণ তারা তাদের ভাষায় সমস্যা মনে করে না, এটি দুর্দান্ত চিহ্ন নয়।
asveikau

4
@lzprgmr অবশ্যই আছে: ব্যতিক্রমগুলি আপনাকে ভিন্নতার সাথে মোকাবিলা করার অনুমতি দেয়। বিভিন্ন ধরণের ত্রুটি। কোডে স্থান। সংযোগ ত্রুটির সাথে মোকাবিলা করার জন্য পুনরায় সংযোগের প্রয়োজন হতে পারে তবে গভীরভাবে নেস্ট করা কোনও ক্রিয়াকলাপের মাঝে নয়। আপনি এটি সংযোগ পরিচালক বা অন্য কিছুতে বুদবুদ করতে চান। তারপরে রিটার্ন মানগুলির সাথে ডিল করা আপনাকে প্রতিটি একক কলের ত্রুটিগুলি পরীক্ষা করতে বাধ্য করে এবং ম্যানুয়ালি বুদবুদ হয় (প্রাক্তনের জন্য সংযোগ পুনরায় সেট করার ত্রুটির ক্ষেত্রে)) এছাড়াও, রিটার্ন মান নেস্টেড কল আপ গাদা: func3 আসতে পারেন -1, func2 func3, আয় আহ্বান -2 তার ত্রুটি উপর, -1 func3 এর, ইত্যাদি .. জন্য
abourget

4
আমি ভোট দিয়ে যাচ্ছিলাম, তবে আমি এটি বিপরীত করেছি কারণ ব্যতিক্রমকে তুচ্ছ করার কারণ এটি। তবে আমার মতে, প্রায় কোনও পদ্ধতি বা কোডের টুকরা ব্যর্থ হতে পারে। আপনি প্রতিটি ত্রুটি শর্তটিকে এর জন্য একটি রিটার্ন মান প্রবর্তন করে পরিচালনা করতে পারবেন না। আপনি ত্রুটি সম্পর্কে তথ্য শিথিল করা হবে। আপনি প্রতিটি বিবৃতি পরীক্ষা করে এবং পরিষ্কার-পরিচ্ছন্নতার মাধ্যমে সবকিছুকে সুন্দরভাবে সিঙ্ক করতে পারেন এমন ভেবে যে একাধিক বিবৃতিতে ত্রুটি ধরা এবং জিসি'এড নয় এমন দুটি বা দুটি সংস্থান পরিষ্কার করা অনেক পরিষ্কার er
মার্টেন বোদেউয়েস

50

গো ব্যতিক্রম না থাকার কারণটি গো ভাষার নকশা এফএকিউতে ব্যাখ্যা করা হয়েছে:

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

জেনেরিকের মতো, ব্যতিক্রমগুলি একটি মুক্ত বিষয় হিসাবে রয়ে গেছে।

অন্য কথায়, তারা এখনও গোপনে ব্যতিক্রমগুলি কীভাবে সমর্থন করবে সেটিকে তারা সন্তুষ্টিজনক বলে মনে করেনি। তারা বলছেন না যে ব্যতিক্রমগুলি প্রতি সেজে খারাপ ;

আপডেট - মে 2012

গো ডিজাইনাররা এখন বেড়া থেকে নীচে উঠে গেছে। তাদের প্রায়শই জিজ্ঞাসিত প্রশ্নাগুলি এখন এটি বলে:

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

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

সত্যিকারের ব্যতিক্রমী পরিস্থিতি থেকে সিগন্যাল এবং পুনরুদ্ধার করতে গোয়ের কয়েকটি বিল্ট-ইন ফাংশন রয়েছে। পুনরুদ্ধার প্রক্রিয়াটি কোনও ত্রুটির পরে কোনও ফাংশনটির রাষ্ট্রের অংশ হিসাবে ছিন্ন হয়েই কার্যকর করা হয় যা বিপর্যয় সামাল দেওয়ার পক্ষে যথেষ্ট তবে অতিরিক্ত নিয়ন্ত্রণ কাঠামোর প্রয়োজন হয় না এবং যখন ভালভাবে ব্যবহার করা হয় তখন পরিষ্কার ত্রুটি-পরিচালনার কোডের ফলাফল হতে পারে।

বিশদে বিশদ, আতঙ্ক এবং পুনরুদ্ধার নিবন্ধটি দেখুন।

সুতরাং সংক্ষিপ্ত উত্তরটি হ'ল মাল্টি-ভ্যালু রিটার্ন ব্যবহার করে তারা এটি আলাদাভাবে করতে পারে। (এবং যাইহোক যাইহোক তাদের পরিচালনা করার একধরণের ব্যতিক্রম রয়েছে))


... এবং লিনাক্স খ্যাত লিনাস ব্যতিক্রমকে বাজে কথা বলেছে।

আপনি যদি জানতে চান যে লিনাস কেন ব্যতিক্রমকে বোকা মনে করে, তবে বিষয়টিতে তাঁর লেখাগুলি সন্ধান করা সবচেয়ে ভাল। আমি এখনও অবধি কেবলমাত্র সন্ধান করেছি C এই উদ্ধৃতিটি সি ++-তে কয়েকটি ইমেলের মধ্যে এম্বেড করা রয়েছে :

"পুরো সি ++ ব্যতিক্রম হ্যান্ডলিং জিনিসটি মূলত ভাঙা It's

আপনি লক্ষ করবেন যে তিনি বিশেষত সি ++ ব্যতিক্রম সম্পর্কে কথা বলছেন, এবং সাধারণভাবে ব্যতিক্রম নয়। (এবং সি ++ ব্যতিক্রমগুলি করে দৃশ্যত কিছু বিষয় যা তাদের চতুর সঠিকভাবে ব্যবহার করা রয়েছে।)

আমার উপসংহারটি হ'ল লিনাস ব্যতিক্রমগুলি (সাধারণভাবে) মোটেও "বোকা" ডাকেনি!


30
আমি এটিকে ঘৃণা করি যখন তারা এফএকিউতে তথ্য রাখে। :)
ব্রায়ান ডি foy

7
নোট করুন যে লিনাস সেই ইমেলটি "C ++" দিয়ে ভয়ঙ্কর ভাষা বলে শুরু করে। এবং সে সি ++ এবং এতে প্রোগ্রাম বেছে নেওয়া লোক উভয়কেই কতটা ঘৃণা করে তা নিয়ে কৌতূহল অব্যাহত রাখে। ফলস্বরূপ আমি সি ++ এর ব্যতিক্রম সম্পর্কে তার মতামতকে নির্ভরযোগ্য হিসাবে বিবেচনা করা যেতে পারে বলে মনে করি না।
ফারাপ

4
@ হাই-অ্যাঞ্জেল - পাঠ্য হিসাবে আমি উদ্ধৃত করেছি যেহেতু: "সরল ত্রুটি পরিচালনা করার জন্য, গো-এর বহু-মূল্য আয়গুলি রিটার্নের মানকে ওভারলোড না করে ত্রুটির প্রতিবেদন করা সহজ করে তোলে" " । এটি এর সাথে সম্পর্কিত। যেভাবেই হোক, আমি গো ডিজাইনারদের যুক্তি উদ্ধৃত করছি। আপনি যদি তর্ক করতে চান তবে <<< তাদের সাথে তর্ক করুন।
স্টিফেন সি

4
@ হাই-এঞ্জেল - আমি এই অনুচ্ছেদগুলি লিখিনি। আমি কেবল এগুলি উদ্ধৃত করেছি। আপনার যদি তাদের সাথে সমস্যা হয়, আপনার সম্ভবত এটি লেখকদের সাথে নেওয়া উচিত। তত্ত্বের ক্ষেত্রে আমি প্রসঙ্গ হিসাবে গো ভাষার বিষয়ে একটি টিউটোরিয়াল সরবরাহ করতে পারতাম। তবে প্রকৃতপক্ষে, গো টার্মিনোলজি বোঝে না এমন লোকেরা এর সমস্ত অর্থ কী তা জানার জন্য গো ওয়েবসাইটে যেতে পারেন।
স্টিফেন সি

4
".. কনভোলিউড কোডে ফলাফল" অনেক দিন আগে আমি অনেক স্ট্রিং অপারেশন সহ সি প্রোগ্রাম লিখেছিলাম। প্রতিটি পদ্ধতি ছিল বরাদ্দ মেমরি এবং তারপরে বরাদ্দটি সফল ছিল কিনা তা পরীক্ষা করে। এটি উপস্থিত হয়েছিল যে সিংহভাগ কোড কেবল বরাদ্দ পরীক্ষা করে। এটি কি সংশ্লেষিত হয় না? ব্যতিক্রম সহ সি ++ আমার জন্য একটি দুর্দান্ত উদ্ধার ছিল।
robsosno

29

ব্যতিক্রমগুলি প্রতি সেজে খারাপ নয়, তবে আপনি যদি জানেন যে এগুলি অনেক কিছু ঘটতে চলেছে, তবে তারা পারফরম্যান্সের ক্ষেত্রে ব্যয়বহুল হতে পারে।

থাম্বের নিয়মটি হ'ল ব্যতিক্রমগুলি ব্যতিক্রমী শর্তগুলিকে পতাকাঙ্কিত করে এবং প্রোগ্রাম প্রবাহ নিয়ন্ত্রণের জন্য আপনার সেগুলি ব্যবহার করা উচিত নয়।


9
@ রবার্ট: "আপনি এগুলি প্রোগ্রামের প্রবাহ নিয়ন্ত্রণের জন্য ব্যবহার করবেন না", আমি এটি নিয়ে এইভাবে ভাবিনি, আমার জন্য নতুন দৃষ্টিকোণ: পি +১
ঠিক

4
এটি সত্যই ভাষার উপর নির্ভর করে। আপনি উদাহরণস্বরূপ জাভাতে প্রোগ্রামিং করলে ব্যতিক্রমগুলি এড়ানো কঠিন।
চার্লস সালভিয়া

4
@ চারেলস: আমি মনে করি মূল বক্তব্যটি হ'ল ব্যর্থতাগুলি এমন পরিস্থিতিতে উপযুক্ত যেগুলি বাগ, ভুল কনফিগার্ড সিস্টেম বা অযৌক্তিক ইনপুটগুলি নির্দেশ করে। বেশিরভাগ জাভা গ্রন্থাগারের ব্যতিক্রমগুলি "স্বাভাবিক কর্মপ্রবাহ" কোড এড়ানো যায়।
আর্টিলিয়াস

6
তাদের খুব বেশি খরচ করতে হবে না। উদাহরণস্বরূপ, আপনি একটি "চেষ্টা" প্রয়োগ করতে পারেন যা শূন্য কার্যকর করার সময় ব্যয় করে, এবং স্ট্যাকের দিকে যে কলার ঠিকানাগুলি দেখায় তার উপর ভিত্তি করে একটি টেবিলের ব্যতিক্রম হ্যান্ডলারের সন্ধান করতে পারে ... আমি বলব যে সবচেয়ে বড় কারণগুলি না ব্যবহার ব্যতিক্রমগুলি পারফরম্যান্সের সাথে মোটেই সম্পর্কিত নয়।
asveikau

পুনঃপ্রণোদিত; প্রশ্নটি সাধারণভাবে ব্যতিক্রমগুলি ব্যবহার করার ক্ষেত্রে, বা কিছু ব্যতিক্রম ব্যবহার না করার জন্য স্পষ্টভাবে ইঙ্গিত দেয় (এগুলি বকাঝকা বা ভাষায় নয়)। আপনার উত্তর কেবলমাত্র প্রোগ্রাম নিয়ন্ত্রণ প্রবাহের জন্য ব্যবহৃত হলে কার্যকারিতার জন্য ব্যতিক্রম কেন খারাপ তা দেখায়।
মার্টেন বোদেউইস

26

আমি "ব্যতিক্রমী পরিস্থিতিতে কেবল ব্যতিক্রম ছোঁড়া" এর সাথে একমত নই। সাধারণত সত্য হলেও এটি বিভ্রান্তিকর। ব্যতিক্রম ত্রুটি শর্তের জন্য (প্রয়োগ ব্যর্থতা)।

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

  • ত্রুটি কোডগুলি ফেরত দেবেন না
  • ত্রুটি কোডগুলি সহজেই উপেক্ষা করা যায় এবং প্রায়শই হয়।
  • ব্যতিক্রম ফ্রেমওয়ার্কে ত্রুটিগুলি রিপোর্ট করার প্রাথমিক মাধ্যম।
  • থাম্বের একটি ভাল নিয়ম হ'ল কোনও পদ্ধতি যদি এর নাম অনুসারে কাজটি না করে তবে এটি একটি পদ্ধতি-স্তরের ব্যর্থতা হিসাবে বিবেচনা করা উচিত, যার ফলে ব্যতিক্রম ঘটে।
  • সম্ভব হলে নিয়ন্ত্রণের স্বাভাবিক প্রবাহের জন্য ব্যতিক্রম ব্যবহার করবেন না

ব্যতিক্রমগুলির সুবিধাগুলিতে নোটের পৃষ্ঠা রয়েছে (এপিআই ধারাবাহিকতা, ত্রুটি পরিচালনা করার কোডের অবস্থানের পছন্দ, উন্নত দৃust়তা ইত্যাদি)) পারফরম্যান্সে একটি বিভাগ রয়েছে যার মধ্যে বেশ কয়েকটি নিদর্শন (পরীক্ষক-ডোর, চেষ্টা-পার্স) অন্তর্ভুক্ত রয়েছে।

ব্যতিক্রম এবং ব্যতিক্রম হ্যান্ডলিং খারাপ নয় । অন্য কোনও বৈশিষ্ট্যের মতো এগুলিও অপব্যবহার করা যায়।


4
আমার তাতে একমত হতে হবে না। আমি ব্যতিক্রমগুলির বিরুদ্ধে নই, এবং সেই বইটি অবশ্যই থাকা উচিত, তবে এটি নেট। বিকাশ এবং সি # এর দিকে পক্ষপাতদুষ্ট।

4
আমি জানি এটি প্রাচীন, কেবলমাত্র মন্তব্য করতে চেয়েছিলেন যে এটি NET টাইপ এবং * নিক্স টাইপের মধ্যে একটি সাধারণ শৈলীর মতবিরোধ হতে পারে বলে মনে হয়। আমি লিনাক্স দেব হিসাবে ব্যবহারযোগ্য সমস্ত লাইব্রেরি রিটার্ন কোডগুলি ব্যবহার করে এবং আমি যে নেক্স স্টাইল গাইড পড়েছি (যেমন আমার সংস্থার এবং গুগলের উদাহরণস্বরূপ) কেবল "আমরা ব্যতিক্রম করি না" বলে দেয় say শুধু মনে হয় এটি আকর্ষণীয়।
জার্ভিস্টেভ

4
ফ্রেমওয়ার্কগুলি শেষ ব্যবহারকারীর অ্যাপ্লিকেশনগুলির চেয়ে ব্যতিক্রমগুলি আলাদাভাবে আচরণ করে। ফ্রেমওয়ার্কগুলির একটি ব্যতিক্রম ছোঁড়া ছাড়া অন্য ত্রুটিগুলি মোকাবেলার কোনও উপায় নেই, ভোক্তা অ্যাপ্লিকেশনগুলি করে।
0x6C38

11

গোলংয়ের দৃষ্টিকোণ থেকে আমার ধারণা, ব্যতিক্রম হ্যান্ডলিং না করাই সংকলন প্রক্রিয়াটি সহজ এবং নিরাপদ রাখে।

লিনাসের দৃষ্টিকোণ থেকে, আমি বুঝতে পারি যে কর্নেল কোডটি কর্নারের ক্ষেত্রে সমস্ত কিছু। সুতরাং এটি ব্যতিক্রম প্রত্যাখ্যান করে তোলে।

কোডগুলিতে ব্যতিক্রমগুলি বোঝায় যে বর্তমান কাজটি মেঝেতে ফেলে দেওয়া ঠিক ছিল এবং যেখানে সাধারণ কেস কোড ত্রুটি পরিচালনার চেয়ে বেশি গুরুত্ব দেয়। তবে তাদের সংকলক থেকে কোড জেনারেশন প্রয়োজন।

উদাহরণস্বরূপ, ওয়েব এবং ডেস্কটপ অ্যাপ্লিকেশন কোডের মতো বেশিরভাগ উচ্চ-স্তরের, ব্যবহারকারী-মুখোমুখি কোডগুলিতে এগুলি ভাল।


তবে কার্নেল কোডের ক্ষেত্রে যা সত্য তা দীর্ঘ সময় ধরে চলমান নেটিভ সার্ভার প্রক্রিয়াগুলির ক্ষেত্রেও সত্য।
লোথার

11

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

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

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

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

4
@ ট্রুইওল ভাষাগুলি যা টেমপ্লেট / জেনেরিকগুলিকে সমর্থন করে আজকালগুলির পরিবর্তে এটির Option<T>পরিবর্তে এটিকে সমাধান করে null। উদাহরণস্বরূপ জাভা 8-তে প্রবর্তিত হয়েছে, পেয়ারা (এবং অন্যদের) থেকে একটি ইঙ্গিত নেওয়া।
মার্টেন বোদেউয়েস

নিবন্ধন করুন মোনাদকে ভালোবাসি। আপনার ভাষা যদি এটি সমর্থন করে এবং প্যাটার্ন মেলানোর প্রস্তাব দেয় তবে এটি যাওয়ার ভাল উপায়।
ট্রুউইল

@ ওলস্টেড অ্যাগেইন, ক্রিস যা বলেছিল তা এখনও তার পক্ষে দৃ holds়রূপে রয়েছে - ব্যবহারকারীকে .orElse (ডিফল্টঅবজেক্ট) ফাংশনটি কল করতে হবে, বা যে কোনও আইডিয়মের যে প্রশ্নে ভাষা সিদ্ধান্ত নিয়েছে। দিনের শেষে এটি শেষ পর্যন্ত প্রোগ্রামারগুলি যা ত্রুটি পরিচালনার পদ্ধতির চেয়ে সমস্যা are
ফারাপ

9

সাধারণ যুক্তি হ'ল কোনও নির্দিষ্ট কোডের (ভাষার উপর নির্ভর করে) ব্যতিক্রমগুলি কীভাবে প্রকাশিত হবে তা বলার উপায় নেই এবং সেগুলি অনেকটা এর মতো goto, ফলে মানসিকভাবে মৃত্যুদন্ড কার্যকর করা কঠিন হয়ে পড়ে।

http://www.joelonsoftware.com/items/2003/10/13.html

এই বিষয়ে অবশ্যই কোনও sensক্যমত্য নেই। আমি বলব যে লিনাসের মতো হার্ড-কোর সি প্রোগ্রামারের দৃষ্টিতে ব্যতিক্রমগুলি অবশ্যই একটি খারাপ ধারণা। যদিও একটি সাধারণ জাভা প্রোগ্রামার এক বিস্তৃত পরিস্থিতিতে রয়েছে।


4
সি কোডের ব্যতিক্রম রয়েছে কিছুটা ভিন্ন উপায়ে। আপনার প্রতিটি কলকে আইএফএসে একটি অ-তুচ্ছ ফাংশনে আবৃত করতে হবে যা সেই ভাষাটি ব্যবহারকে মাথা ব্যথার কারণ করে!
আরসিআইএক্স

4
এখানে setjmp/ longjmpস্টাফগুলিও রয়েছে যা বেশ খারাপ।
টিম সিলভেস্টার

9
আপনি কি সত্যিই এমন কোনও ব্যক্তির পরামর্শ নিতে চান যে ডিউট টেপ প্রোগ্রামারগুলিকে মূল্য দেয় এবং যে ইউনিট পরীক্ষা করা জরুরি বলে বিশ্বাস করে না? joelonsoftware.com/items/2009/09/23.html
ট্রুউইল

4
এটি এমন একটি আলোচনার ক্ষেত্রে ক্লাসিক ভুল (বা প্রতারণা) যেখানে বিষয়টিতে যুক্তিগুলি ব্যক্তিত্বের উল্লেখের সাথে প্রতিস্থাপন করা হয়। এটি সাধারণত অবক্ষয়পূর্ণ আলোচনার লক্ষণ।
পেটর গ্ল্যাডকিখ

4
@ পেটারগ্ল্যাডকিখ ওপেন নিয়ে লিনাসের মতামতকে কেন্দ্র করে আলোচনা শুরু হয়েছিল ... যে প্রতারণা কর্তৃপক্ষের কাছে আপিলের মিথ্যা বলে পরিচিত। আলোচনা কেবল সেখান থেকে উপরে উঠতে পারে, এবং লিনাস কেন তার ব্যক্তিত্বের উল্লেখ করে ব্যতিক্রম পছন্দ করেন না এই প্রশ্নের জবাব দেওয়ার জন্য এটি "প্রতারণা" নয়।
জিম বাল্টার

7

ব্যতিক্রমগুলি খারাপ নয়। তারা সি ++ এর আরআইআই মডেলের সাথে পুরোপুরি ফিট করে যা সি ++ সম্পর্কে সর্বাধিক মার্জিত জিনিস। আপনার কাছে যদি ইতিমধ্যে গুচ্ছ কোড থাকে তবে এটি ব্যতিক্রম নিরাপদ নয়, তবে সে প্রসঙ্গে তারা খারাপ। আপনি যদি লিনাক্স ওএসের মতো সত্যিই নিম্ন স্তরের সফ্টওয়্যার লিখছেন তবে সেগুলি খারাপ। আপনি যদি নিজের কোডটি ত্রুটিযুক্ত ফেরত যাচাই করে থাকেন তবে তা সহায়ক নয়। যদি কোনও ব্যতিক্রম নিক্ষেপ করা হয় (যদি আপনি সি ++ ডিস্ট্রাক্টর সরবরাহ করেন) তবে যদি আপনার রিসোর্স নিয়ন্ত্রণের পরিকল্পনা না থাকে তবে সেগুলি খারাপ।


7
RAII ব্যতিক্রম ব্যতীত দরকারী।
মার্ক র্যানসোম

4
তবে, ব্যতিক্রমগুলি আরআইআইআই (বা কিছু অন্যান্য স্বয়ংক্রিয় সংস্থান পরিচালন) ব্যতীত কার্যকর নয়।
গ্রেগ রজারস

ব্যতিক্রমগুলি যথাযথ নয় এবং ব্যতিক্রমগুলি অন্তর্নিহিত খারাপ নয় এমন পরিস্থিতিগুলি নির্দেশ করার জন্য +1।
ফারাপ

4

ব্যতিক্রমগুলির জন্য দুর্দান্ত ব্যবহারের ক্ষেত্রটি হ'ল ...

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

হ্যাঁ, আমাদের প্রতিটি স্তরের এবং যে কোনও রিসোর্স ক্লিনআপ / লিক সম্পর্কে চিন্তা করতে হবে তবে সাধারণভাবে আমাদের নিয়ন্ত্রণকারীদের কোনওরই পরে পরিষ্কার করার কোনও সংস্থান ছিল না।

godশ্বরের ধন্যবাদ আমাদের ব্যতিক্রম ছিল বা আমি একটি বিশাল অ্যাক্টিক্টর হয়ে থাকতাম এবং এমন কোনও কিছুতে খুব বেশি সময় নষ্ট করতাম যা সাধারণ প্রোগ্রামিংয়ের সমস্যা হতে পারে।


4
+1 আমি যে ব্যতিক্রমগুলি পড়েছি তা ব্যবহার করার জন্য সহজেই সেরা যুক্তিগুলির মধ্যে একটি। আরও বিশদ উদাহরণ ব্যবহার করতে পারত (যেমন একটি ইউএমএল ডায়াগ্রাম, কিছু সিউডোকোড বা কিছু প্রকৃত কোড) তবে সাবক্লাসগুলি ধারাবাহিকভাবে সম্পাদন করার বিষয়ে বিন্দুটি একটি ভাল। এছাড়াও, আপনার প্রমাণটি হ'ল বিবরণী ঘটনাটি প্রদর্শন করে যে ব্যতিক্রমগুলি বাস্তব পরিস্থিতিতে কার্যকর এবং কোনও ভাষা বৈশিষ্ট্যের মূল উদ্দেশ্যই।
ফারাপ

ঠিক একটি সংযোজন হিসাবে, আপনি যদি স্কেলে থাকেন তবে আপনি পরিবর্তে চেষ্টা করতে পারেন [রেসপন্সটাইপ] যা ব্যতিক্রম বা প্রকৃত প্রতিক্রিয়া উপস্থাপন করে। এরপরে আপনি একই ধরণের অনুসরণ করতে পারেন যা আমি উপরের দিকে ফেলে রেখেছি সত্যই ব্যতিক্রম ছাড়া সেগুলি চেষ্টা করে যাওয়া ছাড়া ceptions তারপরে এটি প্রতিটি পদ্ধতির মতো যা আপনার কাছে 1 + n প্রতিক্রিয়া প্রকার রয়েছে যা আমি মনে করি যে এটি প্রয়োজনীয়। আমরা তবে স্কেল রিটার্নে ফিউচার [প্রতিক্রিয়া] যা অনেকটা চেষ্টা মতো কাজ করে তবে আরও অ্যাসিনক্রোনাস প্রোগ্রামিংয়ে সহায়তা করতে পারি।
ডিন হিলার

2

তাত্ত্বিকভাবে তারা আসলেই খারাপ। নিখুঁত গাণিতিক বিশ্বে আপনি ব্যতিক্রম পরিস্থিতি পেতে পারেন না। কার্যকরী ভাষাগুলি দেখুন, তাদের কোনও পার্শ্ব প্রতিক্রিয়া নেই, তাই তাদের কার্যত অব্যক্ত পরিস্থিতির জন্য উত্স নেই।

তবে, বাস্তবতা আর একটি গল্প। আমাদের সবসময় এমন পরিস্থিতি থাকে যা "অপ্রত্যাশিত"। এ কারণেই আমাদের ব্যাতিক্রম দরকার।

আমি মনে করি আমরা ব্যতিক্রম সিনটিএক্স ওজনজারের সিনট্যাক্স চিনির হিসাবে ব্যতিক্রমগুলি সম্পর্কে ভাবতে পারি। আপনি কেবল ব্যতিক্রমগুলির বিজ্ঞপ্তিগুলি পান। বেশি কিছু না.

গো দিয়ে, আমি মনে করি তারা এমন কিছু প্রবর্তন করবে যা "অপ্রত্যাশিত" পরিস্থিতি মোকাবেলা করবে। আমি অনুমান করতে পারি যে তারা এটিকে ব্যতিক্রম হিসাবে কম ধ্বংসাত্মক এবং অ্যাপ্লিকেশন যুক্তি হিসাবে আরও বেশি শব্দ করার চেষ্টা করবে। তবে এটি আমার অনুমান মাত্র।


4
"কার্যকরী ভাষাগুলি দেখুন, তাদের কোনও পার্শ্ব প্রতিক্রিয়া নেই, সুতরাং তাদের কার্যত অব্যক্ত পরিস্থিতির জন্য উত্স নেই" " এটি একটি স্থূল ওভারস্টেটমেন্ট।
স্টিফেন সি

4
গণিতে 5/0 কি? আরকসিন (200)? স্কয়ার্ট (-1)? গণিতে ব্যতিক্রমী পরিস্থিতি প্রচুর রয়েছে।
রবার্ট ফ্রেজার

4
এটি বাস্তবায়িত পরিস্থিতি নয় ... তাদের কেবল কোনও অর্থ নেই ... এবং এর কারণ ব্যতিক্রম হিসাবে বাস্তবায়িত হতে পারে ... তবে পূর্ব শর্তগুলির বহিরাগত হিসাবে প্রয়োগ করা যেতে পারে .. সুতরাং এটি প্রযুক্তিগত বাস্তবায়নের উপর নির্ভর করে depends
মাইক চলি

4
@ মাইকচালি - আমি দুঃখিত, তবে এটি কেবল পরিশীলিত। আপনি এই ধরণের যুক্তি প্রয়োগ করতে পারেন যে কোনও কিছুর ক্ষেত্রে কোনও ব্যতিক্রমী পরিস্থিতি নেই ER বাস্তবে, গাণিতিক অভিব্যক্তিগুলির কোনও অর্থ নেই (বা যার কোনও নির্দিষ্ট মূল্য নেই) ব্যতিক্রমী। এর অর্থ এই নয় যে তাদের ব্যতিক্রম ছোঁড়া এবং ধরা দিয়ে তাদের মোকাবেলা করা দরকার ... তবে আপনি যদি এটি না করেন তবে আপনার বিশেষ মান (যেমন ইনফ এবং ন্যান) বা একাধিক মান ফিরে আসে এমন ক্রিয়াকলাপগুলির প্রয়োজন। সংক্ষেপে, এই ক্ষেত্রেগুলির জন্য এক ধরণের বিশেষ চিকিত্সা প্রয়োজন।
স্টিফেন সি

4
কম্পিউটার স্টেট মেশিন হয়। নিখুঁত গণিতের জগত নয়।
অরুণাভ সান্যাল

1

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

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


1

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


0
  • ব্যতিক্রম হ্যান্ডেল না করা সাধারণত খারাপ।
  • ব্যতিক্রম খারাপভাবে পরিচালনা করা খারাপ (অবশ্যই) is
  • ব্যতিক্রম হ্যান্ডলিংয়ের 'ধার্মিকতা / মন্দতা' প্রসঙ্গ / সুযোগ এবং যথাযথতার উপর নির্ভর করে, না করার জন্য।

0

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

ত্রুটি সংকেতের জন্য আমি সাধারণত ত্রুটি সংকেত পছন্দ করি। সমস্ত API এর উপর নির্ভর করে, কেস এবং তীব্রতা ব্যবহার করে বা লগিংয়ের পক্ষে যথেষ্ট। এছাড়াও আমি আচরণটি এবং throw Phonebooks()তার পরিবর্তে নতুন সংজ্ঞা দেওয়ার চেষ্টা করছি । "ব্যতিক্রমগুলি" প্রায়শই মারা যাওয়ার ধারণাটি থেকে যায় তবে একটি "ফোনবুক" এ ত্রুটি পুনরুদ্ধার বা বিকল্প কার্যকরকরণের রুটগুলির জন্য সহায়ক তথ্য রয়েছে। (এখনও ভাল ব্যবহারের কেস পাওয়া যায় নি, তবে চেষ্টা চালিয়ে যান।)


0

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


কোডটি ব্যর্থ হতে পারে কি না তা (বা হওয়া উচিত নয়) - একটি বড় সমস্যা হ'ল কোডটি যদি ব্যর্থ হয় তবে একটি বিবরণ সম্পর্কে যত্নশীল। যদি কেউ একটি নথি লোড করার চেষ্টা করে এবং "পড়ুন ডেটা" পদ্ধতিগুলির মধ্যে একটি ব্যর্থ হয়, তবে প্রায়শই কোনওটি সত্যিই যত্ন করে না কারণ প্রভাবটি একই রকম নির্বিশেষে: দস্তাবেজটি লোড করা যায় না। ধারণামূলকভাবে, ব্যতিক্রম হ্যান্ডলিং এর জন্য ভাল হওয়া উচিত। সমস্যাটি হ'ল। নেট এবং জাভা-এর ব্যতিক্রম হ্যান্ডলিং দৃষ্টান্তগুলি "বিরক্তিকর" ব্যতিক্রমগুলি আলাদা করার কোনও দুর্দান্ত উপায় সরবরাহ করে না যা একে অপরের উচিত নয় ump
সুপারক্যাট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.