তবে আপনার ক্লায়েন্টের সফ্টওয়্যার ক্রাশ করা এখনও ভাল জিনিস নয়
এটি অবশ্যই একটি ভাল জিনিস।
সিস্টেমটি বন্ধ করতে আপনি এমন কোনও কিছু চান যা সিস্টেমটিকে অপরিজ্ঞাত অবস্থায় ফেলে দেয় কারণ একটি অপরিজ্ঞাত ব্যবস্থা দুর্নীতিগ্রস্ত ডেটা, হার্ডড্রাইভ ফর্ম্যাট করতে এবং রাষ্ট্রপতিকে হুমকী ইমেল প্রেরণ করতে পারে এমন নোংরা কাজ করতে পারে। আপনি যদি পুনরুদ্ধার করতে না পারেন এবং সিস্টেমটিকে একটি সংজ্ঞায়িত অবস্থায় ফিরিয়ে দিতে না পারেন তবে ক্র্যাশ করা দায়বদ্ধ কাজ। ঠিক এ কারণেই আমরা এমন সিস্টেমগুলি তৈরি করি যা চুপি চুপি চুপি চুপি চুপি চুপি চুপি চুপি চুপি চুপি চুপি। এখন নিশ্চিত, আমরা সবাই একটি স্থিতিশীল সিস্টেম চাই যা কখনই ক্রাশ হয় না তবে আমরা কেবল সত্যই এটি চাই যখন সিস্টেমটি একটি নির্ধারিত পূর্বাভাসযোগ্য নিরাপদ অবস্থায় থাকে।
শুনেছি কন্ট্রোল ফ্লো হিসাবে ব্যতিক্রমগুলি একটি গুরুতর অ্যান্টিপ্যাটার্ন হিসাবে বিবেচিত হয়
এটি একেবারে সত্য তবে এটি প্রায়শই ভুল বোঝে। তারা যখন ব্যতিক্রম সিস্টেমটি আবিষ্কার করেছিল তারা ভয় পেয়েছিল যে তারা কাঠামোগত প্রোগ্রামিংটি ভেঙে ফেলছে। স্ট্রাকচার্ড প্রোগ্রামিং কেন আমরা আছে for
, while
, until
, break
, এবং continue
যখন সমস্ত আমরা প্রয়োজন, যে সব কাজ করতে হয় goto
।
ডিজকস্ট্রা আমাদের শিখিয়েছিলেন যে গোটোকে অনানুষ্ঠানিকভাবে ব্যবহার করা (এটি আপনার পছন্দ মতো যেখানেই ঝাঁপিয়ে পড়া) পড়ার কোডকে একটি দুঃস্বপ্ন করে তোলে। যখন তারা আমাদের ব্যতিক্রম সিস্টেমটি দিয়েছে তখন তারা ভয় পেয়েছিল যে তারা গোটো পুনর্নবীকরণ করছে। সুতরাং তারা আমাদের জানিয়েছিল যে আমরা বুঝতে পারব এই আশা করে "এটি প্রবাহ নিয়ন্ত্রণের জন্য ব্যবহার করবেন না" told দুর্ভাগ্যক্রমে, আমরা অনেকেই তা করি নি।
আশ্চর্যের বিষয় হল, আমরা গোটোয়ের সাথে ব্যবহারের মতো স্প্যাগেটি কোড তৈরি করতে প্রায়শই ব্যতিক্রমগুলি ব্যবহার করি না। উপদেশটি নিজেই আরও বেশি সমস্যার সৃষ্টি করেছে বলে মনে হয়।
মৌলিকভাবে ব্যতিক্রম একটি অনুমান প্রত্যাখ্যান সম্পর্কে হয়। আপনি যখন একটি ফাইল সংরক্ষণ করতে বলবেন তখন আপনি ধরে নিবেন যে ফাইলটি সংরক্ষণ করতে পারে এবং হতে পারে। নামটি অবৈধ হওয়া, এইচডি পূর্ণ হওয়া, বা কোনও ইঁদুর আপনার ডেটা কেবলের মাধ্যমে ছড়িয়ে পড়েছে এমনটি হতে না পারলে আপনি যে ব্যতিক্রমটি পাবেন। আপনি এই সমস্ত ত্রুটিগুলি অন্যভাবে পরিচালনা করতে পারেন, আপনি সেগুলি একইভাবে পরিচালনা করতে পারেন, বা আপনি তাদের সিস্টেমটি থামিয়ে দিতে পারেন। আপনার কোডে একটি সুখী পথ রয়েছে যেখানে আপনার অনুমানগুলি সত্যই থাকতে পারে। এক উপায় বা অন্য কোনও ব্যতিক্রম আপনাকে সেই সুখী পথ থেকে দূরে সরিয়ে দেয়। কড়া কথা বললে, হ্যাঁ এটি এক ধরণের "ফ্লো কন্ট্রোল" তবে তারা আপনাকে সাবধান করে দিচ্ছিল না। তারা এইভাবে বাজে কথা বলছিল :
"ব্যতিক্রমগুলি ব্যতিক্রমী হওয়া উচিত"। এই ছোট্ট টোটোলজির জন্ম হয়েছিল কারণ ব্যতিক্রম সিস্টেম ডিজাইনারদের স্ট্যাক ট্রেস তৈরির জন্য সময় প্রয়োজন। চারপাশে লাফানোর তুলনায়, এটি ধীর। এটি সিপিইউর সময় খায়। তবে আপনি যদি লগ ইন করতে এবং সিস্টেমটি বন্ধ করতে চলেছেন বা পরবর্তীটি শুরু করার আগে অন্তত বর্তমান সময়ের নিবিড় প্রক্রিয়াজাতকরণ বন্ধ করে রাখেন তবে আপনার মারার কিছুটা সময় থাকবে। যদি লোকেরা "প্রবাহ নিয়ন্ত্রণের জন্য" ব্যতিক্রমগুলি ব্যবহার শুরু করে তবে সময় সম্পর্কে এই অনুমানগুলি সমস্ত উইন্ডোতে যায়। সুতরাং "ব্যতিক্রমগুলি ব্যতিক্রমী হওয়া উচিত" সত্যই পারফরম্যান্স বিবেচনার জন্য আমাদেরকে দেওয়া হয়েছিল।
এর চেয়ে গুরুত্বপূর্ণ এটি আমাদের বিভ্রান্ত করছে না। উপরের কোডটিতে অসীম লুপটি দেখতে আপনাকে কতক্ষণ সময় লাগল?
ত্রুটি কোডগুলি ফেরত দেবেন না ।
... আপনি যখন এমন কোনও বেস বেসে থাকুন যা সাধারণত ত্রুটি কোডগুলি ব্যবহার করে না তখন ... ভাল পরামর্শ। কেন? কারন কেউ রিটার্নের মানটি সংরক্ষণ করতে এবং আপনার ত্রুটি কোডগুলি পরীক্ষা করতে মনে রাখে না। আপনি সিতে থাকাকালীন এটি এখনও একটি দুর্দান্ত সম্মেলন
OneOf
আপনি আরও একটি কনভেনশন ব্যবহার করছেন। এটি এতক্ষণ ঠিক আছে যতক্ষণ আপনি সম্মেলনটি সেট করছেন এবং কেবল অন্য কোনওটির সাথে লড়াই করছেন না। একই কোড বেসে দুটি ত্রুটি কনভেনশন থাকা বিভ্রান্তিকর। যদি কোনওভাবে আপনি অন্য কোডটি ব্যবহার করে এমন সমস্ত কোড থেকে মুক্তি পেয়ে থাকেন তবে এগিয়ে যান।
আমি নিজেই কনভেনশন পছন্দ করি। আমি এর সর্বাধিক ভাল ব্যাখ্যা এখানে পেয়েছি * :
তবে আমার যতটুকু পছন্দ আমি এখনও অন্য কনভেনশনগুলির সাথে এটি মিশ্রিত করতে যাচ্ছি না। একটি বাছুন এবং এটি দিয়ে লাঠি। 1
1: যার অর্থ আমি একই সময়ে আমাকে একাধিক সম্মেলনের বিষয়ে ভাবতে বাধ্য করি না।
পরবর্তী চিন্তা:
এই আলোচনা থেকে আমি বর্তমানে যা নিচ্ছি তা নিম্নরূপ:
- আপনি যদি আশা করেন যে তাত্ক্ষণিক কলার ব্যাতিক্রমটি বেশিরভাগ সময় ধরে ধরতে এবং পরিচালনা করতে এবং সম্ভবত অন্য কোনও পথ ধরে এটি চালিয়ে যেতে চান তবে এটি সম্ভবত রিটার্নের ধরণের অংশ হওয়া উচিত। Ptionচ্ছিক বা ওয়ানওফ এখানে দরকারী হতে পারে।
- আপনি যদি আশা করেন যে তাত্ক্ষণিক কলার বেশিরভাগ সময় ব্যতিক্রমটি না ধরেন তবে একটি ব্যতিক্রম নিক্ষেপ করুন, স্ট্যাকটি ম্যানুয়ালি পাস করার বোকামি বাঁচাতে।
- আপনি যদি নিশ্চিত হন না যে তাত্ক্ষণিক কলার কী করতে চলেছে তবে পার্স এবং ট্রাইপার্সের মতো উভয়ই সরবরাহ করুন।
এটি সত্যই সহজ নয়। আপনার যে মৌলিক বিষয়গুলি বুঝতে হবে তা হ'ল শূন্যটি কী।
মে মাসে আর কত দিন বাকি? 0 (কারণ এটি মে নয় It's জুন এরই মধ্যে)।
ব্যতিক্রম একটি অনুমানকে প্রত্যাখ্যান করার একটি উপায় তবে এগুলি একমাত্র উপায় নয়। আপনি যদি অনুমানটি প্রত্যাখ্যান করতে ব্যতিক্রমগুলি ব্যবহার করেন তবে আপনি সুখী পথ ছেড়ে চলে যান। তবে আপনি যদি সেই সুখী পথটি নামানোর জন্য মানগুলি বেছে নিয়েছেন যেটি মনে করা হয়েছে যে জিনিসগুলি এতটা সহজ নয় তবে আপনি সেই পথে এত দিন থাকতে পারবেন যতক্ষণ না সেগুলি এই মূল্যবোধগুলির সাথে ডিল করতে পারে। কখনও কখনও 0 এর অর্থ বোঝাতে ইতিমধ্যে ব্যবহৃত হয় যাতে আপনার ধারণাকে প্রত্যাখ্যান করে এমন মানচিত্রের মানচিত্রের জন্য অন্য একটি মান খুঁজে নিতে হবে। আপনি এই ধারণাটি ভাল পুরানো বীজগণিত হিসাবে এর ব্যবহার থেকে সনাক্ত করতে পারেন । মনডাস এটির সাথে সহায়তা করতে পারে তবে এটি সর্বদা মনোড হতে হবে না।
উদাহরণস্বরূপ 2 :
IList<int> ParseAllTheInts(String s) { ... }
আপনি ইচ্ছাকৃতভাবে যে কোনও কিছু ছুঁড়ে ফেলেছেন এমন কোনও ভাল কারণ সম্পর্কে এটি ভাবতে পারেন? অনুমান করুন যখন কোন ইনট পার্স করা যায় না তখন আপনি কী পান? আমি আপনাকে বলার প্রয়োজন নেই।
এটি একটি ভাল নামের লক্ষণ। দুঃখিত তবে ট্রাইপার্স ভাল নাম সম্পর্কে আমার ধারণা নয়।
আমরা প্রায়শই কিছু না পেয়ে ব্যতিক্রম এড়াতে পারি যখন উত্তর একই সাথে এক সাথে একাধিক জিনিস হতে পারে তবে কোনও কারণে যদি উত্তরটি হয় একটি জিনিস বা কিছুই না হয় তবে তা আমাদের একটি জিনিস দেয় বা নিক্ষেপ করার জেদ নিয়ে আমাদের আচ্ছন্ন হয়:
IList<Point> Intersection(Line a, Line b) { ... }
সমান্তরাল রেখাগুলি এখানে কি সত্যিই একটি ব্যতিক্রম ঘটায়? এই তালিকায় যদি কখনও এক পয়েন্টের বেশি থাকে না তবে এটি কি সত্যই খারাপ?
শব্দার্থকভাবে আপনি কেবল এটি নিতে পারবেন না। যদি তা হয়, তবে এটি দুঃখের বিষয়। তবে মোনাদস, এর মতো স্বেচ্ছাচারিত আকার না থাকায় List
এটি আপনাকে আরও ভাল অনুভব করবে।
Maybe<Point> Intersection(Line a, Line b) { ... }
মনাদগুলি হ'ল বিশেষ উদ্দেশ্যে সংগ্রহগুলি যা নির্দিষ্ট উপায়ে ব্যবহার করার জন্য যা তাদের পরীক্ষা করার প্রয়োজন এড়ায়। তারা যা আছে তা বিবেচনা না করেই তাদের সাথে আচরণ করার উপায়গুলি আমাদের খুঁজে পাওয়ার কথা। এইভাবে সুখী পথ সরল থাকে। যদি আপনি প্রতিটি মোনাডকে খোলা এবং পরীক্ষা করে থাকেন তবে আপনি যে স্পর্শটি স্পর্শ করছেন সেগুলি আপনি ভুল ব্যবহার করছেন।
আমি জানি, এটা অদ্ভুত। তবে এটি একটি নতুন সরঞ্জাম (ভাল, আমাদের কাছে)। তাই কিছু সময় দিন। যখন আপনি স্ক্রুগুলিতে তাদের ব্যবহার বন্ধ করবেন তখন হাতুড়িগুলি আরও বোঝা যায়।
আপনি যদি আমাকে জড়িত হন তবে আমি এই মন্তব্যটি সম্বোধন করতে চাই:
উত্তরের যে কোনওটি কীভাবে স্পষ্ট করে না যে হয় মোনাদ একটি ত্রুটি কোড নয় এবং ওয়ানওফও নয়? এগুলি মূলত পৃথক, এবং ফলস্বরূপ প্রশ্নটি একটি ভুল বোঝাবুঝির ভিত্তিতে দেখা যাচ্ছে। (যদিও পরিবর্তিত আকারে এটি এখনও একটি বৈধ প্রশ্ন)) - কনরাড রুডল্ফ জুন 4 `18 14:08 এ
এটা একেবারে সত্য। ব্যতিক্রম, পতাকা, বা ত্রুটি কোডের চেয়ে মনড সংগ্রহগুলির কাছাকাছি। বুদ্ধিমানের সাথে ব্যবহার করার সময় তারা এই জাতীয় জিনিসগুলির জন্য সূক্ষ্ম পাত্রে তৈরি করে।
Result
;-) ব্যবহার করুন