আমি মনে করি যে সমস্ত উত্তর যা ব্যাখ্যা করে যে আপনার কাছে এমন একটি পতাকা থাকা উচিত নয় যা কোনও ব্যতিক্রম নিক্ষেপ করা হয় না ভাল তা নিয়ন্ত্রণ করে। তাদের পরামর্শ হ'ল যে কেউ এই প্রশ্ন জিজ্ঞাসা করার প্রয়োজন বোধ করে তাদের কাছে আমার পরামর্শ হবে।
আমি অবশ্য উল্লেখ করতে চাইছিলাম যে এই নিয়মের একটি অর্থবহ ব্যতিক্রম রয়েছে। আপনি যখন আরও কয়েকশো লোক ব্যবহার করবেন এমন এপিআইগুলি বিকাশ শুরু করার জন্য যথেষ্ট উন্নত হয়ে ওঠেন, এমন কেস রয়েছে যেখানে আপনি এই জাতীয় পতাকা সরবরাহ করতে চাইতে পারেন। আপনি যখন একটি এপিআই লিখছেন, আপনি কেবল পিউরিস্টদের লিখছেন না। আপনি প্রকৃত গ্রাহকদের কাছে লিখছেন যাদের আসল ইচ্ছা রয়েছে। আপনার কাজের একটি অংশ হ'ল তাদের এপিআই দিয়ে তাদের খুশি করা। এটি একটি প্রোগ্রামিং সমস্যার পরিবর্তে একটি সামাজিক সমস্যা হয়ে দাঁড়ায় এবং কখনও কখনও সামাজিক সমস্যাগুলি এমন সমাধানগুলি নির্দেশ করে যা নিজেরাই প্রোগ্রামিং সমাধান হিসাবে আদর্শের চেয়ে কম হবে।
আপনি দেখতে পাচ্ছেন যে আপনার এপিআইর দুটি স্বতন্ত্র ব্যবহারকারী রয়েছে যার মধ্যে একটি ব্যতিক্রম চায় এবং একটি যা না চায়। এটি ঘটতে পারে এমন বাস্তব জীবনের উদাহরণ হ'ল একটি লাইব্রেরি যা বিকাশে এবং এমবেডেড সিস্টেমে উভয়ই ব্যবহৃত হয়। বিকাশের পরিবেশে ব্যবহারকারীরা সর্বত্র সর্বত্র ব্যতিক্রম চান। ব্যতিক্রমগুলি অপ্রত্যাশিত পরিস্থিতি পরিচালনার জন্য খুব জনপ্রিয়। তবে এগুলি অনেক এম্বেড থাকা পরিস্থিতিতে নিষিদ্ধ করা হয়েছে কারণ তারা চারপাশে রিয়েল-টাইম সীমাবদ্ধতা বিশ্লেষণ করতে খুব শক্ত। যখন আপনি আসলে আপনার ফাংশনটি সম্পাদন করতে কেবল গড় সময় না নিয়ে চিন্তা করেন তবে যে কোনও একক মজাদার জন্য সময় লাগে, কোনও যথেচ্ছ স্থানে স্ট্যাকটি আনওয়াইন্ড করার ধারণাটি খুব অনাকাঙ্ক্ষিত।
আমার জন্য বাস্তব জীবনের উদাহরণ: একটি গণিতের পাঠাগার। যদি আপনার গণিত গ্রন্থাগারের কোনও Vector
শ্রেণি থাকে যা একই দিকের ইউনিট ভেক্টর পাওয়ার পক্ষে সমর্থন করে তবে আপনাকে প্রস্থ দ্বারা বিভাজন করতে সক্ষম হতে হবে। দৈর্ঘ্য যদি 0 হয় তবে আপনার শূন্য পরিস্থিতিতে বিভাজন রয়েছে। বিকাশে আপনি এগুলি ধরতে চান । আপনি 0 টি প্রায় ফাঁসি দিয়ে আশ্চর্যজনক বিভাজন চান না। একটি ব্যতিক্রম নিক্ষেপ এর জন্য খুব জনপ্রিয় সমাধান। এটি প্রায়শই ঘটে না (এটি সত্যই ব্যতিক্রমী আচরণ) তবে এটি যখন ঘটে তখন আপনি এটি জানতে চান।
এম্বেড থাকা প্ল্যাটফর্মে আপনি এই ব্যতিক্রমগুলি চান না। এটি একটি চেক করতে আরও বুদ্ধিমান হবে if (this->mag() == 0) return Vector(0, 0, 0);
। আসলে, আমি এটি বাস্তব কোডে দেখছি।
এখন ব্যবসায়ের দৃষ্টিকোণ থেকে চিন্তা করুন। আপনি এপিআই ব্যবহারের দুটি ভিন্ন উপায় শেখানোর চেষ্টা করতে পারেন:
// Development version - exceptions // Embeded version - return 0s
Vector right = forward.cross(up); Vector right = forward.cross(up);
Vector localUp = right.cross(forward); Vector localUp = right.cross(forward);
Vector forwardHat = forward.unit(); Vector forwardHat = forward.tryUnit();
Vector rightHat = right.unit(); Vector rightHat = right.tryUnit();
Vector localUpHat = localUp.unit() Vector localUpHat = localUp.tryUnit();
এটি এখানে বেশিরভাগ উত্তরের মতামত সন্তুষ্ট করে তবে সংস্থার দৃষ্টিকোণ থেকে এটি অনাকাঙ্ক্ষিত। এম্বেডেড বিকাশকারীদের কোডিংয়ের একটি স্টাইল শিখতে হবে , এবং বিকাশ বিকাশকারীদের অন্যটি শিখতে হবে। এটি বরং উদ্বেগজনক হতে পারে এবং মানুষকে ভাবনার এক পন্থায় বাধ্য করে। সম্ভাব্যতর খারাপ: আপনি কীভাবে প্রমাণ করবেন যে এম্বেড করা সংস্করণটিতে কোনও ব্যতিক্রম নিক্ষেপ কোড অন্তর্ভুক্ত নেই? নিক্ষিপ্ত সংস্করণ সহজেই মিশ্রণ করতে পারে, কোনও ব্যয়বহুল ব্যর্থতা পর্যালোচনা বোর্ড এটি না পাওয়া পর্যন্ত আপনার কোডের কোথাও লুকিয়ে থাকে।
অন্যদিকে, যদি আপনার কাছে একটি পতাকা থাকে যা ব্যতিক্রম হ্যান্ডলিংটি চালু বা বন্ধ করে দেয় তবে উভয় গ্রুপই কোডিংয়ের একই স্টাইল শিখতে পারে। আসলে, অনেক ক্ষেত্রে, আপনি এমনকি অন্য দলের প্রকল্পগুলিতে একটি গোষ্ঠীর কোড ব্যবহার করতে পারেন। এই কোডটি ব্যবহারের unit()
ক্ষেত্রে, যদি 0 টি দ্বারা বিভাজনের ক্ষেত্রে কী ঘটে থাকে সে সম্পর্কে আপনি যদি সত্যিই যত্নশীল হন, আপনার নিজের পরীক্ষাটি লিখে নেওয়া উচিত ছিল। সুতরাং, আপনি যদি এটি এম্বেড থাকা সিস্টেমে সরিয়ে নিয়ে যান, যেখানে আপনি কেবল খারাপ ফলাফল পান, সেই আচরণটি "বুদ্ধিমান"। এখন, ব্যবসায়ের দৃষ্টিকোণ থেকে, আমি আমার কোডারদের একবার প্রশিক্ষণ দিই এবং তারা আমার ব্যবসায়ের সমস্ত অংশে একই API এবং একই শৈলী ব্যবহার করে।
বেশিরভাগ ক্ষেত্রে, আপনি অন্যের পরামর্শ অনুসরণ করতে চান: tryGetUnit()
ব্যতিক্রম ছুঁড়ে না এমন ফাংশনগুলির জন্য পছন্দসই বা অনুরূপ আইডিয়ম ব্যবহার করুন এবং পরিবর্তে নালীর মতো একটি সেন্ডিনেল মান ফিরিয়ে দিন। আপনি যদি ভাবেন যে ব্যবহারকারীরা একক প্রোগ্রামের মধ্যে পাশাপাশি ব্যতিক্রম হ্যান্ডলিং এবং অ-ব্যতিক্রম হ্যান্ডলিং কোড উভয়ই ব্যবহার করতে চাইতে পারে তবে tryGetUnit()
স্বরলিপিটি আটকে দিন । তবে এমন এক কোণার কেস রয়েছে যেখানে ব্যবসায়ের বাস্তবতা পতাকা ব্যবহার করা আরও ভাল করে তুলতে পারে। যদি আপনি সেই কোণার ক্ষেত্রে নিজেকে খুঁজে পান, তবে উপায়ে "নিয়ম" টস করতে ভয় পাবেন না। এটাই নিয়মের জন্য!