ত্রুটি পরিচালনা পরিচালনা করার আধুনিক উপায় ...


118

আমি এই সমস্যার জন্য এখনই কিছুক্ষণ চিন্তা করছি এবং নিজেকে ক্রমাগত সতর্কতা এবং বৈপরীত্যগুলি সন্ধান করতে পারি, তাই আমি আশা করছি যে কেউ নিম্নলিখিতটির সাথে সিদ্ধান্তে পৌঁছাতে পারে:

ত্রুটি কোডগুলির চেয়ে পছন্দ ব্যতিক্রম

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

তবে - আমার কাছে এটি বিপরীত বলে মনে হচ্ছে ...

ইন্টারফেসে কোডিং, বাস্তবায়ন নয়

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

যদি না - ইন্টারফেসটি ...

ব্যতিক্রম স্পেসিফিকেশন

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

তবে - এটি একটি পরামর্শ বলে মনে হচ্ছে ...

ফাঁস বিমূর্ততা

কোনও ইন্টারফেস কেন নির্দিষ্ট করবে যে কোন ব্যতিক্রম নিক্ষেপ করা যেতে পারে? যদি বাস্তবায়নের কোনও ব্যতিক্রম ছোঁড়ার প্রয়োজন না হয় বা অন্য ব্যতিক্রম ছুঁড়ে দেওয়ার দরকার হয় তবে কী হবে? কোনও বাস্তবায়ন কোন ব্যতিক্রমটি ছুঁড়ে দিতে পারে তা জানতে কোনও ইন্টারফেস স্তরে কোনও উপায় নেই।

তাই ...

শেষ করা

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


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

@ নির্ধারণ কীভাবে একটি ইন্টারফেসটি বলতে পারে একটি বাস্তবায়ন কী ছুঁড়ে? এটি টাইপ সিস্টেমে সমস্ত ব্যতিক্রম ছুঁড়ে দিতে পারে! এবং যে অনেকগুলি ভাষা ব্যতিক্রমের
উল্লেখগুলিকে

1
আমি একমত যে কোনও পদ্ধতি ফেলতে পারে এমন সমস্ত ব্যতিক্রমগুলি পরিচালনা করা কৌশলপূর্ণ হতে পারে, যদি এটি নিজে অন্য পদ্ধতি ব্যবহার করে এবং অভ্যন্তরীণভাবে তাদের ব্যতিক্রমগুলি না ধরে তবে। এটি বলার পরে, এটি কোনও দ্বন্দ্ব নয়।
প্রতারণা করুন

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

উত্তর:


31

প্রথমত, আমি এই বক্তব্যের সাথে একমত নই:

ত্রুটি কোডগুলির চেয়ে পছন্দ ব্যতিক্রম

এটি সর্বদা ক্ষেত্রে হয় না: উদাহরণস্বরূপ, অবজেক্টিভ-সি (ফাউন্ডেশন ফ্রেমওয়ার্ক সহ) একবার দেখুন। সেখানে জাভা বিকাশকারী সত্য ব্যতিক্রম বলবেন: অ্যাসিটি, @ ক্যাচ, @ থ্রো, এনএসইসেপশন ক্লাস, ইত্যাদি সত্ত্বেও ত্রুটিগুলি পরিচালনা করার পক্ষে এনএসইররর পছন্দনীয় উপায় There

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

ত্রুটি / ব্যতিক্রমের সাথে সর্বনিম্ন সম্ভাব্য স্তরে, সময়সীমা নিয়ে কাজ করুন

আমি মনে করি যে কেউ যদি থাম্বের সেই নিয়মটি ধরে রাখেন তবে বিমূর্ততা থেকে "ফাঁস" এর পরিমাণ খুব সীমাবদ্ধ এবং এতে থাকতে পারে।

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

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

এটি সমস্ত এক জিনিস থেকে ফোটে: ভাল ইন্টারফেস ডিজাইন। আপনি যদি আপনার ইন্টারফেসটি যথেষ্ট পরিমাণে ডিজাইন করেন তবে কোনও পরিমাণ ব্যতিক্রম আপনাকে হতাশ করবে না। অন্যথায়, এটি কেবল ব্যতিক্রম নয় যা আপনাকে বিরক্ত করবে।

এছাড়াও, আমি মনে করি যে জাভাটির নির্মাতাদের কোনও পদ্ধতি ঘোষণার / সংজ্ঞায় ব্যতিক্রম অন্তর্ভুক্ত করার জন্য খুব শক্তিশালী সুরক্ষার কারণ ছিল।

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


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

4
@ জোশুয়া ড্রেক: তিনি অবশ্যই ভুল। ব্যতিক্রম এবং gotoখুব আলাদা। উদাহরণস্বরূপ, ব্যতিক্রমগুলি সর্বদা একই দিকে চলে যায় - কল স্ট্যাকের নিচে। এবং দ্বিতীয়ত, অবাক করা ব্যতিক্রম থেকে নিজেকে রক্ষা করা ঠিক ডিআরওয়াইয়ের মতোই অনুশীলন is উদাহরণস্বরূপ, সি ++ এ, আপনি যদি পরিষ্কার-পরিচ্ছন্নতা নিশ্চিত করতে আরএআইআই ব্যবহার করেন, তবে এটি কেবল ব্যতিক্রম নয়, সমস্ত সাধারণ নিয়ন্ত্রণ প্রবাহকে সব ক্ষেত্রেই পরিষ্কার-পরিচ্ছন্নতা নিশ্চিত করে । এটি অসীম আরও নির্ভরযোগ্য। try/finallyকিছুটা অনুরূপ কিছু সাধন করে। আপনি যখন পরিষ্কার-পরিচ্ছন্নতার গ্যারান্টি দিচ্ছেন, তখন আপনাকে ব্যতিক্রমগুলি বিশেষ কেস হিসাবে বিবেচনা করার দরকার নেই।
ডেড এমজি

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

25
-1 কারণ আমি "সর্বনিম্নতম স্তরে ত্রুটি / ব্যতিক্রমের সাথে কারবার" - এর সাথে পুরোপুরি একমত নই। যথাযথ স্তরে ত্রুটি / ব্যতিক্রমগুলি নিয়ে ডিল করুন । বেশিরভাগ ক্ষেত্রে এটি অনেক উচ্চ স্তর এবং সেই ক্ষেত্রে ত্রুটি কোডগুলি একটি বিশাল ব্যথা। ত্রুটি কোডগুলির তুলনায় ব্যতিক্রমকে সমর্থন করার কারণ হ'ল তারা আপনাকে স্তরের মধ্যবর্তী স্তরের প্রভাব ছাড়াই কোন স্তরের সাথে তাদের মোকাবেলা করতে অবাধে নির্বাচন করার অনুমতি দেয় choose
মাইকেল বর্গওয়ার্ট

2
@ জর্জিও: আর্টিমা.com/intv/ handcuffs.html দেখুন - বিশেষত পৃষ্ঠা 2 এবং 3
মাইকেল বর্গওয়ার্ট

27

আমি কেবল এটি লক্ষ করতে চাই যে ব্যতিক্রম এবং ত্রুটি কোডগুলি ত্রুটি এবং বিকল্প কোডের পাথগুলির সাথে মোকাবিলা করার একমাত্র উপায় নয়।

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

func x = do
    a <- operationThatMightFail 10
    b <- operationThatMightFail 20
    c <- operationThatMightFail 30
    return (a + b + c)

অপারেশনথমাইটফেইল এমন একটি ফাংশন যা একটি মেয়ের মধ্যে মোড়ানো কোনও মান দেয়। এটি একটি অযোগ্য পয়েন্টারের মতো কাজ করে, তবে নোটেশনটি গ্যারান্টি দেয় যে a, b, বা c এর কোনওটি ব্যর্থ হলে পুরো জিনিসটি বাতিল করতে পুরো মূল্যায়ন করে। (এবং সংকলক দুর্ঘটনাজনিত নালপয়েন্টার এক্সেকশন থেকে আপনাকে রক্ষা করে)

আরেকটি সম্ভাবনা হ'ল আপনার কল করা প্রতিটি ক্রিয়াকলাপের অতিরিক্ত যুক্তি হিসাবে ত্রুটি হ্যান্ডলার অবজেক্টটি পাস করা। এই ত্রুটি হ্যান্ডলারের প্রতিটি সম্ভাব্য "ব্যতিক্রম" এর জন্য একটি পদ্ধতি রয়েছে যা আপনি এটি দিয়েছিলেন এমন ফাংশন দ্বারা সংকেত দেওয়া যেতে পারে এবং ব্যতিক্রমগুলি ব্যতিরেকে স্ট্যাকটিকে পুনরায় আবদ্ধ না করেই যেখানে ঘটে থাকে সেখানে ব্যতিক্রমগুলি ব্যবহার করার জন্য এই ফাংশনটি ব্যবহার করা যেতে পারে।

কমন এলআইএসপি এটি করে এবং সিনট্যাটিক সমর্থন (অন্তর্নিহিত যুক্তি) ও বিল্ট-ইন ফাংশনগুলি এই প্রোটোকলটি অনুসরণ করে এটি সম্ভব করে তোলে।


1
আসলেই ঝরঝরে। বিকল্পগুলি সম্পর্কে অংশটির উত্তর দেওয়ার জন্য ধন্যবাদ :)
রিচকে

1
বিটিডাব্লু, ব্যতিক্রমগুলি আধুনিক অত্যাবশ্যক ভাষার অন্যতম কার্যকরী অংশ। ব্যতিক্রম একটি monad গঠন। ব্যতিক্রমগুলি প্যাটার ম্যাচিং ব্যবহার করে। ব্যতিক্রমগুলি আসলে কী Maybeতা না শিখেই আবেদনকারী স্টাইলের অনুকরণে সহায়তা করে ।
9000

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

8

হ্যাঁ, ব্যতিক্রমগুলি ফাঁস বিমূর্ততা তৈরি করতে পারে। তবে এ ক্ষেত্রে ত্রুটি কোডগুলি কি আরও খারাপ নয়?

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

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

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


1
আমি বুঝতে পারি না কেন ত্রুটি কোডের কারণে ফাঁস বিমূর্ততা ঘটতে পারে। যদি কোনও সাধারণ রিটার্ন মানের পরিবর্তে একটি ত্রুটি কোড ফিরে আসে এবং এই আচরণটি ফাংশন / পদ্ধতির স্পেসিফিকেশনটিতে বর্ণিত হয়, তবে আইএমও কোনও ফাঁস হয় না। নাকি আমি কিছু উপেক্ষা করছি?
জর্জিও 21

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

আমি বুঝেছি তুমি কি বলতে চাচ্ছো. আপনি যদি প্রয়োগের নির্দিষ্ট ত্রুটিগুলি প্রতিবেদন করতে চান তবে এপিআই বাস্তবায়ন অজ্ঞেয়াদি হতে পারে না (ত্রুটি কোড সহ বা ব্যতিক্রম নয়)। আমার ধারণা, একমাত্র সমাধান হ'ল "রিসোর্স উপলভ্য নয়" এর মতো একটি বাস্তবায়ন-অজোনস্টিক ত্রুটি কোডটি সংজ্ঞায়িত করা বা এপিআই বাস্তবায়ন-অজ্ঞাতবিদ্যার নয় তা স্থির করা।
জর্জিও

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

এবং বিটিডব্লিউ, যা ঠিক জাভা.লাং.এসকিউএলএক্সসেপশন করে। এটা আছে getSQLState(জেনেরিক) এবং getErrorCode(বিক্রেতা-নির্দিষ্ট)। এখন কেবল যদি এটির যথাযথ সাবক্লাস থাকে ...
স্লেসকে

5

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

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

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

আমি ব্যতিক্রম বিরোধী নই, তবে এগুলি কয়েক বছর আগের একক লেখনীর মতো বলে মনে হচ্ছে: খুব ঘন ঘন এবং অনুপযুক্তভাবে ব্যবহৃত হয়। এগুলি ব্যবহারের জন্য নিখুঁত, তবে কেসটি মনে করেন তত বিস্তৃত নয়।


4

ফাঁস বিমূর্ততা

কোনও ইন্টারফেস কেন নির্দিষ্ট করবে যে কোন ব্যতিক্রম নিক্ষেপ করা যেতে পারে? যদি বাস্তবায়নের কোনও ব্যতিক্রম ছোঁড়ার প্রয়োজন না হয় বা অন্য ব্যতিক্রম ছুঁড়ে দেওয়ার দরকার হয় তবে কী হবে? কোনও বাস্তবায়ন কোন ব্যতিক্রমটি ছুঁড়ে দিতে পারে তা জানতে কোনও ইন্টারফেস স্তরে কোনও উপায় নেই।

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

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


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

@ মিসিংনো: এটি কারণ, যথারীতি জাভা এগুলির একটি ভয়ঙ্কর বাস্তবায়ন করে, চেক করা ব্যতিক্রমগুলি অন্তর্নিহিত খারাপ বলে নয়।
ডেড এমজি

1
@ মিসিংনো: চেক করা ব্যতিক্রমের ফলে কী ধরণের সমস্যা দেখা দিতে পারে?
জর্জিও

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

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

2

আচ্ছা ব্যতিক্রম হ্যান্ডলিংয়ের নিজস্ব ইন্টারফেস বাস্তবায়ন থাকতে পারে। ছুঁড়ে দেওয়া ব্যতিক্রমের ধরণের উপর নির্ভর করে কাঙ্ক্ষিত পদক্ষেপগুলি সম্পাদন করুন।

আপনার নকশা সমস্যার সমাধানটি হল দুটি ইন্টারফেস / বিমূর্তকরণ বাস্তবায়ন। একটি কার্যকারিতা জন্য এবং অন্যটি ব্যতিক্রম হ্যান্ডলিংয়ের জন্য। এবং ধরা পড়া ব্যতিক্রমের ধরণের উপর নির্ভর করে উপযুক্ত ব্যতিক্রম প্রকারের শ্রেণি কল করুন।

ত্রুটি কোডগুলির বাস্তবায়ন ব্যতিক্রম পরিচালনা করার একটি গোঁড়া পদ্ধতি। এটি স্ট্রিং বনাম স্ট্রিং বিল্ডারের ব্যবহারের মতো।


4
অন্য কথায়: বাস্তবায়নগুলি এপিআই-তে সংজ্ঞায়িত ব্যতিক্রমগুলির সাবক্লাস ফেলে দেয়।
অ্যান্ড্রু কুক

2

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

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

উপরের পর্যবেক্ষণটি কোনও আলগাভাবে সংযুক্ত ইন্টারফেসে বাড়ানো যেতে পারে (যেমন আপনি উল্লেখ করেছেন); আমি মনে করি এটি আসলে একটি আদর্শ যে 3-6 স্ট্যাক ফ্রেমগুলি ক্রাইপিংয়ের পরে, একটি অনাবৃত ব্যতিক্রম কোডের একটি বিভাগে শেষ হতে পারে যা হয়:

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

উপরের বিষয়টি বিবেচনা করে, throwsশব্দার্থকগুলির সাথে ইন্টারফেসগুলি সাজানো কেবলমাত্র একটি প্রান্তিক কার্যকরী লাভ, কারণ ইন্টারফেস চুক্তিগুলির মাধ্যমে প্রচুর কলার কেবল ব্যর্থ হলেই যত্নশীল হবেন না কেন।

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

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


1

ত্রুটি কোডগুলির চেয়ে পছন্দ ব্যতিক্রম

  • দুজনেরই সহাবস্থান করা উচিত।

  • যখন আপনি কিছু আচরণের প্রত্যাশা করেন তখন ত্রুটি কোডটি ফেরান।

  • আপনি কিছু আচরণের প্রত্যাশা না করলে ব্যতিক্রমটি ফেরৎ দিন।

  • ব্যতিক্রম কোডগুলি সাধারণত একটি একক বার্তার সাথে সম্পর্কিত হয়, যখন ব্যতিক্রম প্রকারটি থেকে যায় তবে একটি বার্তা আলাদা হতে পারে

  • ব্যতিক্রমের স্ট্যাক ট্রেস রয়েছে, যখন ত্রুটি কোডটি নেই। আমি ভাঙা সিস্টেমটি ডিবাগ করতে ত্রুটি কোডগুলি ব্যবহার করি না।

ইন্টারফেসে কোডিং বাস্তবায়ন নয়

এটি জাভা-র ক্ষেত্রে সুনির্দিষ্ট হতে পারে তবে আমি যখন আমার ইন্টারফেসগুলি ঘোষণা করি তখন সেই ইন্টারফেসের প্রয়োগের ফলে কোন ব্যতিক্রমগুলি ছুঁড়ে ফেলা হতে পারে তা নির্দিষ্ট করে দিই না, এটি ঠিক অর্থপূর্ণ নয়।

যখন আমরা একটি ব্যতিক্রম ধরা অবশ্যই আমরা বাস্তবায়ন সম্পর্কে অনুমান করা হয়?

এটি সম্পূর্ণ আপনার উপর নির্ভর করে। আপনি চেষ্টা করতে পারেন এবং খুব নির্দিষ্ট ধরণের ব্যতিক্রম ধরতে পারেন এবং তারপরে আরও সাধারণকে ধরতে পারেন Exception। ব্যতিক্রমগুলি স্ট্যাকটি প্রচার করতে এবং তারপরে এটি পরিচালনা করতে দেয় না কেন? বিকল্পভাবে আপনি অ্যাসপেক্ট প্রোগ্রামিংয়ের দিকে নজর দিতে পারেন যেখানে ব্যতিক্রম হ্যান্ডলিং একটি "প্লাগযোগ্য" দিক হয়ে ওঠে।

যদি বাস্তবায়নের কোনও ব্যতিক্রম ছোঁড়ার প্রয়োজন না হয় বা অন্য ব্যতিক্রম ছুঁড়ে দেওয়ার দরকার হয় তবে কী হবে?

বুঝতে পারছিনা কেন এটি আপনার সমস্যা? হ্যাঁ, আপনার একটি প্রয়োগ হতে পারে যা কখনই ব্যতিক্রম হয় না বা ছোঁড়ে না এবং আপনার একটি পৃথক বাস্তবায়ন থাকতে পারে যা নিয়মিত ব্যর্থ হয় এবং ব্যতিক্রম ছুঁড়ে দেয়। যদি এটি হয় তবে ইন্টারফেসে কোনও ব্যতিক্রম উল্লেখ করবেন না এবং আপনার সমস্যার সমাধান হয়েছে।

ব্যতিক্রম পরিবর্তে যদি আপনার বাস্তবায়ন ফলাফল অবজেক্ট ফিরিয়ে দেয় তবে কি এটি কিছু পরিবর্তন করতে পারে? এই বস্তুটিতে কোনও ত্রুটি / ব্যর্থতা থাকলে আপনার ক্রিয়াকলাপের ফলাফলও থাকবে। তারপরে আপনি সেই বস্তুটি জিজ্ঞাসাবাদ করতে পারেন।


1

ফাঁস বিমূর্ততা

কোনও ইন্টারফেস কেন নির্দিষ্ট করবে যে কোন ব্যতিক্রম নিক্ষেপ করা যেতে পারে? যদি বাস্তবায়নের কোনও ব্যতিক্রম ছোঁড়ার প্রয়োজন না হয় বা অন্য ব্যতিক্রম ছুঁড়ে দেওয়ার দরকার হয় তবে কী হবে? কোনও বাস্তবায়ন কোন ব্যতিক্রমটি ছুঁড়ে দিতে পারে তা জানতে কোনও ইন্টারফেস স্তরে কোনও উপায় নেই।

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

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


1

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

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

সারমর্ম:

  • আমি মনে করি ব্যতিক্রমগুলি একটি ক্লিনার কোড এবং টেস্টিং এবং ডিবাগিংয়ের জন্য আরও আক্রমণাত্মক পদ্ধতির মঞ্জুরি দেয় কারণ ত্রুটি কোডের চেয়ে অচেনা ব্যতিক্রমগুলি আরও বেশি দৃশ্যমান এবং অবহেলা করা কঠিন (শীঘ্রই ব্যর্থ)।
  • অন্যদিকে, পরীক্ষার সময় সন্ধান করা হয়নি এমন ব্যতিক্রমী বাগগুলি ক্র্যাশ আকারে উত্পাদন পরিবেশে উপস্থিত হতে পারে। নির্দিষ্ট পরিস্থিতিতে এই আচরণটি গ্রহণযোগ্য নয় এবং এই ক্ষেত্রে আমি মনে করি ত্রুটি কোডগুলি ব্যবহার করা আরও দৃust় পদ্ধতির is

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

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

প্রথম: আপনি সমস্ত ব্যতিক্রমগুলি পরীক্ষা করতে পারেন - কেবল "পোকেমন ব্যতিক্রম হ্যান্ডলিং" করুন (তাদের সকলকে ধরতে হবে - যেমন catch Exceptionবা এমনকি Throwable, বা সমতুল্য)।
sleske

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

-1

ডান পক্ষপাতদুষ্ট হয়।

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

Downside? সঠিক ত্রুটি পরিচালনার কোডটি ঘৃণ্য দেখাচ্ছে (সমস্ত ব্যবস্থার ক্ষেত্রে সত্য)।


এটি পূর্বের 10 টি উত্তরগুলিতে তৈরি এবং ব্যাখ্যা করা পয়েন্টগুলির চেয়ে বেশি কিছু দেওয়ার প্রস্তাব দিচ্ছে না। কেন মতো জিনিস সঙ্গে দুই বছর বয়সী প্রশ্ন bumping
মশা

এখানে কেউ ছাড়াও সঠিক পক্ষপাতিত্ব উল্লেখ করেছেন mentioned হুগমগ হ্যাশেল সম্পর্কে ঘনিষ্ঠভাবে কথা বলে উঠল, তবে এটি সম্ভবত ছদ্মবেশী ত্রুটি হ্যান্ডলার কারণ ত্রুটি কেন ঘটেছে তার কোনও ব্যাখ্যা ছাড়েনি বা পুনরুদ্ধার করার কোনও প্রত্যক্ষ পদ্ধতি এবং কল-ব্যাক নিয়ন্ত্রণ প্রবাহের নকশায় সবচেয়ে বড় পাপগুলির মধ্যে একটি। এবং এই প্রশ্নটি গুগলে এসেছিল।
কেয়ানান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.