গুগলের গো ল্যাঙ্গুয়েজের ডিজাইন পছন্দ হিসাবে কোনও ব্যতিক্রম নেই এবং লিনাক্স খ্যাত লিনাস ব্যতিক্রমকে বাজে কথা বলেছে। কেন?
গুগলের গো ল্যাঙ্গুয়েজের ডিজাইন পছন্দ হিসাবে কোনও ব্যতিক্রম নেই এবং লিনাক্স খ্যাত লিনাস ব্যতিক্রমকে বাজে কথা বলেছে। কেন?
উত্তর:
ব্যতিক্রমগুলি কোড লিখতে সত্যই সহজ করে তোলে যেখানে ব্যতিক্রম নিক্ষেপ করা আক্রমণকারীদের ভেঙে দেয় এবং অবজেক্টগুলিকে অসামঞ্জস্য অবস্থায় ফেলে দেয়। এগুলি আপনাকে মূলত মনে রাখতে বাধ্য করে যে আপনার করা প্রতিটি বিবৃতি সম্ভাব্যভাবে ছুঁড়ে ফেলতে পারে এবং সঠিকভাবে এটি পরিচালনা করতে পারে। এটি করা কৌতুকপূর্ণ এবং পাল্টা স্বজ্ঞাত হতে পারে।
এরকম কিছুকে সাধারণ উদাহরণ হিসাবে বিবেচনা করুন:
class Frobber
{
int m_NumberOfFrobs;
FrobManager m_FrobManager;
public:
void Frob()
{
m_NumberOfFrobs++;
m_FrobManager.HandleFrob(new FrobObject());
}
};
ধরে নেওয়া যাক FrobManager
হবে , এই সৌন্দর্য ঠিক আছে, ঠিক আছে? বা নাও হতে পারে ... তাহলে ভাবুন যদি হয় বা ব্যতিক্রম ছোঁড়ে। এই উদাহরণে, ইনক্রিমেন্টটি পিছনে ফিরে আসে না। সুতরাং, যে কেউ এর উদাহরণ ব্যবহার করে তার সম্ভবত একটি দূষিত বস্তু থাকতে চলেছে।delete
FrobObject
FrobManager::HandleFrob()
operator new
m_NumberOfFrobs
Frobber
এই উদাহরণটি নির্বোধ বলে মনে হতে পারে (ঠিক আছে, একটি :-) নির্মাণের জন্য আমাকে নিজেকে কিছুটা প্রসারিত করতে হয়েছিল), তবে, গ্রহণযোগ্যতাটি হ'ল যদি কোনও প্রোগ্রামার নিয়মিতভাবে ব্যতিক্রম সম্পর্কে চিন্তা না করে এবং রাষ্ট্রের প্রতিটি ক্রমবিন্যাস ঘূর্ণিত হয় তা নিশ্চিত করে তোলে ফিরে যখনই ছুড়ে দেওয়া হয়, আপনি এইভাবে সমস্যায় পড়বেন।
উদাহরণস্বরূপ, আপনি মুটেক্সেসের মতোই এটি ভাবতে পারেন। একটি সমালোচনা বিভাগের অভ্যন্তরে, আপনি ডেটা স্ট্রাকচারগুলি দুর্নীতিগ্রস্থ না হয়েছে এবং অন্যান্য থ্রেডগুলি আপনার মধ্যবর্তী মানগুলি দেখতে পাচ্ছে না তা নিশ্চিত করতে আপনি বেশ কয়েকটি বিবৃতিতে নির্ভর করেন। যদি এই বিবৃতিগুলির মধ্যে যে কোনও একটি এলোমেলোভাবে চালিত না হয় তবে আপনি বেদনার জগতে শেষ হন। এখন লক এবং সম্মতি মুছে ফেলুন, এবং এর মতো প্রতিটি পদ্ধতি সম্পর্কে ভাবেন। যদি আপনি চান তবে অবজেক্টের স্টেটে ক্রমান্বয়ে লেনদেন হিসাবে প্রতিটি পদ্ধতিটিকে ভাবেন। আপনার পদ্ধতি কলের শুরুতে, অবজেক্টটি পরিষ্কার অবস্থা হওয়া উচিত, এবং শেষে একটি পরিষ্কার অবস্থাও হওয়া উচিত। এর মধ্যে ভেরিয়েবলের foo
সাথে সামঞ্জস্য হতে পারেbar
, তবে আপনার কোডটি শেষ পর্যন্ত এটি সংশোধন করবে। ব্যতিক্রম বলতে যা বোঝায় তা হ'ল আপনার যে কোনও বিবৃতি আপনাকে যে কোনও সময় বাধা দিতে পারে। ডান এটিকে সঠিকভাবে পেতে এবং প্রতিটি ঘটনার পরে ফিরে রোল করার জন্য প্রতিটি স্বতন্ত্র পদ্ধতি আপনার উপর থাকে বা আপনার ক্রিয়াকলাপকে অর্ডার করে যাতে ছুঁড়ে ফেলে দেওয়া বস্তুর অবস্থার উপর প্রভাব না পড়ে। যদি আপনি এটি ভুল হয়ে থাকেন (এবং এই ধরণের ভুল করা সহজ) তবে কলার আপনার মধ্যবর্তী মানগুলি দেখে শেষ হয়।
আরআইআই এর মতো পদ্ধতিগুলি, যা সি ++ প্রোগ্রামাররা এই সমস্যার চূড়ান্ত সমাধান হিসাবে উল্লেখ করতে পছন্দ করে, এর থেকে রক্ষা করতে দীর্ঘ পথ যেতে পারে। তবে এগুলি সিলভার বুলেট নয়। এটি নিশ্চিত করবে যে আপনি কোনও উত্স থেকে রিসোর্স প্রকাশ করেছেন, তবে আপনাকে অবজেক্টের রাষ্ট্রের দুর্নীতির বিষয়ে এবং মধ্যবর্তী মানগুলি দেখে কলার থেকে মুক্ত করবে না। সুতরাং, মানুষ অনেক আপনার পরিচিত বলতে হয়, শৈলী কোডিং এর ক্ষমতাপ্রদান দ্বারা কোন ব্যতিক্রম । আপনি যে ধরণের কোড লিখেছেন তা সীমাবদ্ধ রাখলে এই বাগগুলি প্রবর্তন করা আরও কঠিন er যদি আপনি এটি না করেন তবে ভুল করা মোটামুটি সহজ।
সি ++ এ ব্যতিক্রমী নিরাপদ কোডিং সম্পর্কে সমস্ত বই লেখা হয়েছে। অনেক বিশেষজ্ঞ এটি ভুল পেয়েছে। যদি এটি সত্যিই জটিল এবং এর মধ্যে অনেকগুলি স্নিগ্ধতা থাকে তবে এটি সম্ভবত একটি ভাল চিহ্ন যা আপনার সেই বৈশিষ্ট্যটি উপেক্ষা করার দরকার। :-)
গো ব্যতিক্রম না থাকার কারণটি গো ভাষার নকশা এফএকিউতে ব্যাখ্যা করা হয়েছে:
ব্যতিক্রম একটি অনুরূপ গল্প। ব্যতিক্রমগুলির জন্য বেশ কয়েকটি ডিজাইনের প্রস্তাব দেওয়া হয়েছে তবে প্রতিটি ভাষা এবং রান-টাইমে উল্লেখযোগ্য জটিলতা যুক্ত করে। তাদের প্রকৃতির দ্বারা, ব্যতিক্রমগুলি স্প্যান ফাংশন এবং সম্ভবত এমনকি গোরোটাইনসও রয়েছে; তাদের বিস্তৃত প্রভাব আছে। গ্রন্থাগারগুলিতে তাদের কী প্রভাব পড়বে তা নিয়েও উদ্বেগ রয়েছে। তারা সংজ্ঞা অনুসারে, অন্যান্য ভাষার সাথে ব্যতিক্রমী তবুও অভিজ্ঞতা যা তাদের সমর্থন করে তা দেখায় যে তাদের গ্রন্থাগার এবং ইন্টারফেসের বিশদকরণের উপর গভীর প্রভাব রয়েছে। এটি এমন ডিজাইন সন্ধান করে ভাল লাগবে যা সাধারণ ত্রুটিগুলিকে বিশেষ নিয়ন্ত্রণ প্রবাহে পরিণত করতে উত্সাহিত না করে সত্যই ব্যতিক্রমী হতে দেয় যার জন্য প্রতিটি প্রোগ্রামারকে ক্ষতিপূরণ দেওয়া প্রয়োজন।
জেনেরিকের মতো, ব্যতিক্রমগুলি একটি মুক্ত বিষয় হিসাবে রয়ে গেছে।
অন্য কথায়, তারা এখনও গোপনে ব্যতিক্রমগুলি কীভাবে সমর্থন করবে সেটিকে তারা সন্তুষ্টিজনক বলে মনে করেনি। তারা বলছেন না যে ব্যতিক্রমগুলি প্রতি সেজে খারাপ ;
আপডেট - মে 2012
গো ডিজাইনাররা এখন বেড়া থেকে নীচে উঠে গেছে। তাদের প্রায়শই জিজ্ঞাসিত প্রশ্নাগুলি এখন এটি বলে:
আমরা বিশ্বাস করি যে নিয়ন্ত্রণের কাঠামোর সাথে মিলিত ব্যতিক্রমগুলি, যেমন-চেষ্টা-অবশেষে আইডিয়মের মতো ফলাফল সংশ্লেষিত কোডের ফলাফল। এটি প্রোগ্রামারদের অনেকগুলি সাধারণ ত্রুটি যেমন একটি ফাইল খোলার ব্যর্থতা ব্যতিক্রমী হিসাবে লেবেল করতে উত্সাহিত করে।
গো আলাদা পদ্ধতি গ্রহণ করে। সরল ত্রুটি পরিচালনার জন্য, গো-এর বহু-মূল্য রিটার্নগুলি রিটার্ন মানটি ওভারলোড না করে ত্রুটির প্রতিবেদন করা সহজ করে তোলে। গো-র অন্যান্য বৈশিষ্ট্যগুলির সাথে মিলিত একটি ক্যানোনিকাল ত্রুটি প্রকার, ত্রুটি পরিচালনার ক্ষেত্রে ত্রুটিটিকে আনন্দদায়ক করে তোলে তবে অন্য ভাষাগুলির থেকে একেবারেই আলাদা।
সত্যিকারের ব্যতিক্রমী পরিস্থিতি থেকে সিগন্যাল এবং পুনরুদ্ধার করতে গোয়ের কয়েকটি বিল্ট-ইন ফাংশন রয়েছে। পুনরুদ্ধার প্রক্রিয়াটি কোনও ত্রুটির পরে কোনও ফাংশনটির রাষ্ট্রের অংশ হিসাবে ছিন্ন হয়েই কার্যকর করা হয় যা বিপর্যয় সামাল দেওয়ার পক্ষে যথেষ্ট তবে অতিরিক্ত নিয়ন্ত্রণ কাঠামোর প্রয়োজন হয় না এবং যখন ভালভাবে ব্যবহার করা হয় তখন পরিষ্কার ত্রুটি-পরিচালনার কোডের ফলাফল হতে পারে।
বিশদে বিশদ, আতঙ্ক এবং পুনরুদ্ধার নিবন্ধটি দেখুন।
সুতরাং সংক্ষিপ্ত উত্তরটি হ'ল মাল্টি-ভ্যালু রিটার্ন ব্যবহার করে তারা এটি আলাদাভাবে করতে পারে। (এবং যাইহোক যাইহোক তাদের পরিচালনা করার একধরণের ব্যতিক্রম রয়েছে))
... এবং লিনাক্স খ্যাত লিনাস ব্যতিক্রমকে বাজে কথা বলেছে।
আপনি যদি জানতে চান যে লিনাস কেন ব্যতিক্রমকে বোকা মনে করে, তবে বিষয়টিতে তাঁর লেখাগুলি সন্ধান করা সবচেয়ে ভাল। আমি এখনও অবধি কেবলমাত্র সন্ধান করেছি C এই উদ্ধৃতিটি সি ++-তে কয়েকটি ইমেলের মধ্যে এম্বেড করা রয়েছে :
"পুরো সি ++ ব্যতিক্রম হ্যান্ডলিং জিনিসটি মূলত ভাঙা It's
আপনি লক্ষ করবেন যে তিনি বিশেষত সি ++ ব্যতিক্রম সম্পর্কে কথা বলছেন, এবং সাধারণভাবে ব্যতিক্রম নয়। (এবং সি ++ ব্যতিক্রমগুলি করে দৃশ্যত কিছু বিষয় যা তাদের চতুর সঠিকভাবে ব্যবহার করা রয়েছে।)
আমার উপসংহারটি হ'ল লিনাস ব্যতিক্রমগুলি (সাধারণভাবে) মোটেও "বোকা" ডাকেনি!
ব্যতিক্রমগুলি প্রতি সেজে খারাপ নয়, তবে আপনি যদি জানেন যে এগুলি অনেক কিছু ঘটতে চলেছে, তবে তারা পারফরম্যান্সের ক্ষেত্রে ব্যয়বহুল হতে পারে।
থাম্বের নিয়মটি হ'ল ব্যতিক্রমগুলি ব্যতিক্রমী শর্তগুলিকে পতাকাঙ্কিত করে এবং প্রোগ্রাম প্রবাহ নিয়ন্ত্রণের জন্য আপনার সেগুলি ব্যবহার করা উচিত নয়।
আমি "ব্যতিক্রমী পরিস্থিতিতে কেবল ব্যতিক্রম ছোঁড়া" এর সাথে একমত নই। সাধারণত সত্য হলেও এটি বিভ্রান্তিকর। ব্যতিক্রম ত্রুটি শর্তের জন্য (প্রয়োগ ব্যর্থতা)।
আপনি যে ভাষা ব্যবহার করুন না কেন, ফ্রেমওয়ার্ক ডিজাইনের গাইডলাইনগুলির একটি অনুলিপি নিন : কনভেনশন, আইডিয়াম এবং পুনরায় ব্যবহারযোগ্য। নেট লাইব্রেরিগুলির জন্য প্যাটার্ন (দ্বিতীয় সংস্করণ)। ব্যতিক্রম ছোঁড়ার অধ্যায়টি পিয়ার ছাড়াই। প্রথম সংস্করণ থেকে কিছু উদ্ধৃতি (আমার কাজকালের দ্বিতীয়):
ব্যতিক্রমগুলির সুবিধাগুলিতে নোটের পৃষ্ঠা রয়েছে (এপিআই ধারাবাহিকতা, ত্রুটি পরিচালনা করার কোডের অবস্থানের পছন্দ, উন্নত দৃust়তা ইত্যাদি)) পারফরম্যান্সে একটি বিভাগ রয়েছে যার মধ্যে বেশ কয়েকটি নিদর্শন (পরীক্ষক-ডোর, চেষ্টা-পার্স) অন্তর্ভুক্ত রয়েছে।
ব্যতিক্রম এবং ব্যতিক্রম হ্যান্ডলিং খারাপ নয় । অন্য কোনও বৈশিষ্ট্যের মতো এগুলিও অপব্যবহার করা যায়।
গোলংয়ের দৃষ্টিকোণ থেকে আমার ধারণা, ব্যতিক্রম হ্যান্ডলিং না করাই সংকলন প্রক্রিয়াটি সহজ এবং নিরাপদ রাখে।
লিনাসের দৃষ্টিকোণ থেকে, আমি বুঝতে পারি যে কর্নেল কোডটি কর্নারের ক্ষেত্রে সমস্ত কিছু। সুতরাং এটি ব্যতিক্রম প্রত্যাখ্যান করে তোলে।
কোডগুলিতে ব্যতিক্রমগুলি বোঝায় যে বর্তমান কাজটি মেঝেতে ফেলে দেওয়া ঠিক ছিল এবং যেখানে সাধারণ কেস কোড ত্রুটি পরিচালনার চেয়ে বেশি গুরুত্ব দেয়। তবে তাদের সংকলক থেকে কোড জেনারেশন প্রয়োজন।
উদাহরণস্বরূপ, ওয়েব এবং ডেস্কটপ অ্যাপ্লিকেশন কোডের মতো বেশিরভাগ উচ্চ-স্তরের, ব্যবহারকারী-মুখোমুখি কোডগুলিতে এগুলি ভাল।
নিজের মধ্যে এবং তার ব্যতিক্রমগুলি "খারাপ" নয়, ব্যতিক্রমগুলি কখনও কখনও পরিচালনা করা হয় যা খারাপ হতে থাকে। এই কয়েকটি সমস্যা সমাধানে ব্যতিক্রমগুলি পরিচালনা করার সময় বেশ কয়েকটি নির্দেশিকা প্রয়োগ করা যেতে পারে। এর মধ্যে কয়েকটি অন্তর্ভুক্ত রয়েছে (তবে অবশ্যই সীমাবদ্ধ নয়):
Option<T>
পরিবর্তে এটিকে সমাধান করে null
। উদাহরণস্বরূপ জাভা 8-তে প্রবর্তিত হয়েছে, পেয়ারা (এবং অন্যদের) থেকে একটি ইঙ্গিত নেওয়া।
সাধারণ যুক্তি হ'ল কোনও নির্দিষ্ট কোডের (ভাষার উপর নির্ভর করে) ব্যতিক্রমগুলি কীভাবে প্রকাশিত হবে তা বলার উপায় নেই এবং সেগুলি অনেকটা এর মতো goto
, ফলে মানসিকভাবে মৃত্যুদন্ড কার্যকর করা কঠিন হয়ে পড়ে।
http://www.joelonsoftware.com/items/2003/10/13.html
এই বিষয়ে অবশ্যই কোনও sensক্যমত্য নেই। আমি বলব যে লিনাসের মতো হার্ড-কোর সি প্রোগ্রামারের দৃষ্টিতে ব্যতিক্রমগুলি অবশ্যই একটি খারাপ ধারণা। যদিও একটি সাধারণ জাভা প্রোগ্রামার এক বিস্তৃত পরিস্থিতিতে রয়েছে।
setjmp
/ longjmp
স্টাফগুলিও রয়েছে যা বেশ খারাপ।
ব্যতিক্রমগুলি খারাপ নয়। তারা সি ++ এর আরআইআই মডেলের সাথে পুরোপুরি ফিট করে যা সি ++ সম্পর্কে সর্বাধিক মার্জিত জিনিস। আপনার কাছে যদি ইতিমধ্যে গুচ্ছ কোড থাকে তবে এটি ব্যতিক্রম নিরাপদ নয়, তবে সে প্রসঙ্গে তারা খারাপ। আপনি যদি লিনাক্স ওএসের মতো সত্যিই নিম্ন স্তরের সফ্টওয়্যার লিখছেন তবে সেগুলি খারাপ। আপনি যদি নিজের কোডটি ত্রুটিযুক্ত ফেরত যাচাই করে থাকেন তবে তা সহায়ক নয়। যদি কোনও ব্যতিক্রম নিক্ষেপ করা হয় (যদি আপনি সি ++ ডিস্ট্রাক্টর সরবরাহ করেন) তবে যদি আপনার রিসোর্স নিয়ন্ত্রণের পরিকল্পনা না থাকে তবে সেগুলি খারাপ।
ব্যতিক্রমগুলির জন্য দুর্দান্ত ব্যবহারের ক্ষেত্রটি হ'ল ...
বলুন আপনি কোনও প্রকল্পে রয়েছেন এবং প্রতিটি কন্ট্রোলার (প্রায় 20 টি বিভিন্ন প্রধান) একটি ক্রিয়া পদ্ধতির সাহায্যে একটি একক সুপারক্লাস নিয়ামককে প্রসারিত করে। তারপরে প্রতিটি নিয়ন্ত্রক একে অপরের কাছে কল, বি, সি, ডি এবং অন্য ক্ষেত্রে এফ, জি, ডি কল করার জন্য একে অপরের থেকে পৃথক পৃথক কিছু জিনিস রাখে। ব্যতিক্রমগুলি এখানে প্রতিরোধের জন্য আসে যেখানে অনেকগুলি রিটার্ন কোড ছিল এবং প্রতিটি নিয়ামক এটিকে অন্যরকমভাবে পরিচালনা করছেন ling আমি সেই সমস্ত কোডটি ধাক্কা দিয়েছি, "ডি" থেকে সঠিক ব্যতিক্রম ছুঁড়েছি, এটি সুপারক্লাস নিয়ামক ক্রিয়া পদ্ধতিতে পেয়েছি এবং এখন আমাদের সমস্ত নিয়ামক সুসংগত। পূর্বে ডি বহুবিধ ত্রুটিযুক্ত মামলার জন্য নালাগুলি ফিরে আসছিল যা আমরা শেষ ব্যবহারকারীকে বলতে চাই কিন্তু করতে পারিনি এবং করতে পারি নি '
হ্যাঁ, আমাদের প্রতিটি স্তরের এবং যে কোনও রিসোর্স ক্লিনআপ / লিক সম্পর্কে চিন্তা করতে হবে তবে সাধারণভাবে আমাদের নিয়ন্ত্রণকারীদের কোনওরই পরে পরিষ্কার করার কোনও সংস্থান ছিল না।
godশ্বরের ধন্যবাদ আমাদের ব্যতিক্রম ছিল বা আমি একটি বিশাল অ্যাক্টিক্টর হয়ে থাকতাম এবং এমন কোনও কিছুতে খুব বেশি সময় নষ্ট করতাম যা সাধারণ প্রোগ্রামিংয়ের সমস্যা হতে পারে।
তাত্ত্বিকভাবে তারা আসলেই খারাপ। নিখুঁত গাণিতিক বিশ্বে আপনি ব্যতিক্রম পরিস্থিতি পেতে পারেন না। কার্যকরী ভাষাগুলি দেখুন, তাদের কোনও পার্শ্ব প্রতিক্রিয়া নেই, তাই তাদের কার্যত অব্যক্ত পরিস্থিতির জন্য উত্স নেই।
তবে, বাস্তবতা আর একটি গল্প। আমাদের সবসময় এমন পরিস্থিতি থাকে যা "অপ্রত্যাশিত"। এ কারণেই আমাদের ব্যাতিক্রম দরকার।
আমি মনে করি আমরা ব্যতিক্রম সিনটিএক্স ওজনজারের সিনট্যাক্স চিনির হিসাবে ব্যতিক্রমগুলি সম্পর্কে ভাবতে পারি। আপনি কেবল ব্যতিক্রমগুলির বিজ্ঞপ্তিগুলি পান। বেশি কিছু না.
গো দিয়ে, আমি মনে করি তারা এমন কিছু প্রবর্তন করবে যা "অপ্রত্যাশিত" পরিস্থিতি মোকাবেলা করবে। আমি অনুমান করতে পারি যে তারা এটিকে ব্যতিক্রম হিসাবে কম ধ্বংসাত্মক এবং অ্যাপ্লিকেশন যুক্তি হিসাবে আরও বেশি শব্দ করার চেষ্টা করবে। তবে এটি আমার অনুমান মাত্র।
সি ++ এর ব্যতিক্রম হ্যান্ডলিং দৃষ্টান্ত যা জাভা যা এর জন্য একটি আংশিক ভিত্তি গঠন করে এবং পরিবর্তে। নেট, কিছু ভাল ধারণাটি প্রবর্তন করে তবে এর কিছু গুরুতর সীমাবদ্ধতাও রয়েছে। ব্যতিক্রম হ্যান্ডলিংয়ের অন্যতম মূল নকশা উদ্দেশ্য হ'ল পদ্ধতিগুলি যাতে তারা তাদের পোস্ট-শর্তগুলি পূরণ করে বা একটি ব্যতিক্রম ছুঁড়ে দেয় তা নিশ্চিত করার অনুমতি দেয় এবং এটিও নিশ্চিত করে যে কোনও পদ্ধতি ছাড়ার আগেই যে কোনও পরিষ্কার-পরিচ্ছন্নতা হওয়া দরকার, তা ঘটবে। দুর্ভাগ্যক্রমে, সি ++, জাভা এবং। নেট এর ব্যতিক্রম হ্যান্ডলিং দৃষ্টান্তগুলি যেখানে পরিস্থিতিগুলি অপ্রত্যাশিত কারণগুলি প্রত্যাশিত পরিচ্ছন্নতা সম্পাদন থেকে বিরত করে সেখানে পরিস্থিতি পরিচালনার কোনও ভাল উপায় সরবরাহ করতে ব্যর্থ। এর পরিবর্তে এর অর্থ হ'ল যে কোনওটি যদি অপ্রত্যাশিতভাবে ঘটে থাকে তবে সবকিছুই স্ক্রাইচিং থামতে হবে এমন ঝুঁকি থাকা উচিত (স্ট্যাক আনওয়াইন্ডিংয়ের সময় একটি ব্যতিক্রম হ্যান্ডেল করার ক্ষেত্রে সি ++ পন্থা),
এমনকি যদি ব্যতিক্রম হ্যান্ডলিংটি সাধারণত ভাল হয় তবে এটি অস্বীকারযোগ্য একটি ব্যতিক্রম-হ্যান্ডলিং দৃষ্টান্ত হিসাবে বিবেচনা করা অযৌক্তিক নয় যা অন্যান্য সমস্যার পরে পরিষ্কার করার সময় ঘটে যাওয়া সমস্যাগুলি পরিচালনা করার জন্য একটি ভাল উপায় সরবরাহ করতে ব্যর্থ হয়। এটি এমনটি বলার অপেক্ষা রাখে না যে একটি ব্যতিক্রম-হ্যান্ডলিং দৃষ্টান্তের সাথে একটি কাঠামো ডিজাইন করা যায়নি যা একাধিক ব্যর্থতার পরিস্থিতিতেও বুদ্ধিমান আচরণ নিশ্চিত করতে পারে, তবে শীর্ষ ভাষা বা ফ্রেমওয়ার্কগুলির কোনও এখনও এটি করতে পারে না।
আমি অন্যান্য সমস্ত উত্তর পড়তে পারি নি, সুতরাং এই মা ইয়াহভের কথা ইতিমধ্যে উল্লেখ করা হয়েছে, তবে একটি সমালোচনা হ'ল কোডগুলি ডিবাগ করার সময় ত্রুটিগুলি চিহ্নিত করতে অসুবিধা তৈরি করে তারা দীর্ঘ শৃঙ্খলে ভেঙে প্রোগ্রাম তৈরি করে। উদাহরণস্বরূপ, যদি ফু () বার () কে কল করে যা ওয়াহ () কে টুস্ট্রিং () নামে ডাকে তবে অজ্ঞাতসারে ভুল তথ্য টসস্ট্রিং () এ ঠেকিয়ে ফু () এর ত্রুটির মতো দেখা যাচ্ছে, এটি প্রায় সম্পূর্ণ সম্পর্কযুক্ত নয় function
ঠিক আছে, বোরিং উত্তর এখানে। আমার ধারণা এটি সত্যিই ভাষার উপর নির্ভর করে। যেখানে ব্যতিক্রম বরাদ্দকৃত সম্পদগুলি পিছনে ফেলে দিতে পারে, সেগুলি এড়ানো উচিত। স্ক্রিপ্টিং ভাষাগুলিতে তারা কেবল অ্যাপ্লিকেশন প্রবাহের অংশগুলি ত্যাগ করে বা অতিক্রম করে। এটি নিজের মধ্যে অপছন্দনীয়, তবুও ব্যাতিক্রমের সাথে মারাত্মক ত্রুটিগুলি থেকে মুক্তি পাওয়া একটি গ্রহণযোগ্য ধারণা।
ত্রুটি সংকেতের জন্য আমি সাধারণত ত্রুটি সংকেত পছন্দ করি। সমস্ত API এর উপর নির্ভর করে, কেস এবং তীব্রতা ব্যবহার করে বা লগিংয়ের পক্ষে যথেষ্ট। এছাড়াও আমি আচরণটি এবং throw Phonebooks()
তার পরিবর্তে নতুন সংজ্ঞা দেওয়ার চেষ্টা করছি । "ব্যতিক্রমগুলি" প্রায়শই মারা যাওয়ার ধারণাটি থেকে যায় তবে একটি "ফোনবুক" এ ত্রুটি পুনরুদ্ধার বা বিকল্প কার্যকরকরণের রুটগুলির জন্য সহায়ক তথ্য রয়েছে। (এখনও ভাল ব্যবহারের কেস পাওয়া যায় নি, তবে চেষ্টা চালিয়ে যান।)
আমার জন্য বিষয়টি খুব সহজ। অনেক প্রোগ্রামার ব্যতিক্রম হ্যান্ডলারটি অনুপযুক্ত ব্যবহার করে। আরও ভাষার সংস্থান আরও ভাল। ব্যতিক্রমগুলি পরিচালনা করতে সক্ষম হওয়াই ভাল। খারাপ ব্যবহারের একটি উদাহরণ একটি মান যা অবশ্যই পূর্ণসংখ্যার যাচাই করা উচিত নয়, বা অন্য কোনও ইনপুট যা বিভক্ত হতে পারে এবং শূন্য বিভাগের জন্য যাচাই করা যায় না ... ব্যতিক্রম হ্যান্ডলিং আরও বেশি কাজ এবং কঠোর চিন্তাভাবনা এড়ানোর সহজ উপায় হতে পারে, প্রোগ্রামার একটি নোংরা শর্টকাট করতে এবং একটি ব্যতিক্রম হ্যান্ডলিং প্রয়োগ করতে চাইতে পারে ... বিবৃতি: "একটি পেশাদার কোড কখনও ব্যর্থ হয় না" মায়াজাল হতে পারে, যদি অ্যালগরিদম দ্বারা প্রক্রিয়াজাত কিছু সমস্যা তার নিজস্ব প্রকৃতির দ্বারা অনিশ্চিত থাকে। সম্ভবত প্রকৃতির দ্বারা অজানা পরিস্থিতিতে ব্যতিক্রম হ্যান্ডলার খেলতে আসা ভাল। ভালো প্রোগ্রামিং অনুশীলনগুলি বিতর্কের বিষয়।