"প্রোগ্রামিং ত্রুটি" ব্যাতিক্রম - আমার পদ্ধতির শব্দ কি?


9

আমি বর্তমানে আমার ব্যতিক্রমগুলির ব্যবহারের উন্নতি করার চেষ্টা করছি এবং ব্যতিক্রমগুলির মধ্যে গুরুত্বপূর্ণ পার্থক্য খুঁজে পেয়েছি যা প্রোগ্রামিংয়ের ত্রুটিগুলি বোঝায় (উদাহরণস্বরূপ কেউ আর্গুমেন্ট হিসাবে নাল পাস করেছেন, বা নিষ্পত্তি হওয়ার পরে কোনও বস্তুর উপর কোনও পদ্ধতি বলেছিলেন) এবং যারা ব্যর্থতা নির্দেশ করে অপারেশন যা কলারের দোষ নয় (যেমন একটি I / O ব্যতিক্রম)।

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


আমি ব্যতিক্রমগুলির অন্য একটি বিভাগের মধ্যে পার্থক্য করি: ব্যবসায় ব্যতিক্রম। এগুলি ত্রুটি শর্তগুলির উল্লেখ করে যা ব্যবহারকারীদের বিবরণে আগ্রহী। আমি সাধারণত সেই ব্যতিক্রমগুলি পরীক্ষা করে দেখি।
বেলুচিন

উত্তর:


2

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

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

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

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

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

আইডিস্পোজেবলের জন্য নির্দিষ্ট, প্রায়শই এই ইন্টারফেসের প্রয়োগগুলি একটি বিকল্প পদ্ধতি সরবরাহ করে যা সুস্পষ্ট নিষ্পত্তি প্রক্রিয়াটির চেয়ে বেশি পছন্দ করা হয়। এই ক্ষেত্রে, পছন্দসই পদ্ধতিটি হাইলাইট করুন এবং নোট করুন যে সুস্পষ্ট নিষ্পত্তি পছন্দ নয়।


আমি কোন মানগুলি অনুমোদিত তা নথিভুক্ত করার প্রয়োজনীয়তাটি বুঝতে পেরেছি, তবে আপনি যদি কোনও ফাংশন দেখেন performReadCommand(ICommand cmd, int replySizeBytes)- আপনি কি আশা করতে পারেন যে নালটি সেমিডির জন্য গ্রহণযোগ্য হবে, বা উত্তরসাইজাইটসের জন্য একটি নেতিবাচক মান? আইএমও ডকুমেন্টেশন কেবল তখনই প্রয়োজন হবে যদি এই মানগুলি আসলে অনুমোদিত হয় এবং আপনার সম্ভবত উত্তর দেওয়া উচিত যে উত্তরটি সাইজবাইটের জন্য 0 বৈধ কিনা।
মেডো 42

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

2

এখানে আমার নিজের চিন্তা আছে। মনে রাখবেন যে আমি খুব নিশ্চিত নই যে এটি যাওয়ার সবচেয়ে ভাল উপায়, এই কারণেই আমি এই প্রশ্নটি প্রথম স্থানে তৈরি করেছি।

আমি যতদূর বুঝতে পেরেছি, তাত্ক্ষণিক কলারের পক্ষে প্রোগ্রামিং ত্রুটির ব্যতিক্রমগুলি হ্যান্ডেল করা কিছুটা বোধগম্য নয়, তার পরিবর্তে পূর্ববর্তী শর্তগুলি পূরণ হয়েছে তা নিশ্চিত করা উচিত। টাস্কের সীমানায় কেবলমাত্র "বাহ্যিক" ব্যতিক্রম হ্যান্ডলারদের তাদের ধরা উচিত, যাতে কোনও টাস্ক ব্যর্থ হলে তারা সিস্টেমটি চালিয়ে রাখতে পারে।

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

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

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


1

থাম্বের একটি যুক্তিসঙ্গত নিয়ম:

  1. যে কোনও ব্যতিক্রম আপনি ঠিক করতে পারেন তা ধরুন।
  2. ধরা যাক, মন্তব্য করুন এবং যে কোনও ব্যতিক্রম আপনি ঠিক করতে পারবেন না তবে এটি সম্পর্কে দরকারী কিছু বলতে পারেন।
  3. আপনি কোনও প্রক্রিয়া বা ডিফল্ট প্রসেসিংয়ের চেয়ে ভাল নির্ণয় করতে পারেন এমন ব্যতিক্রমটি ধরবেন না।

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


0

এমনকি জাভা সমস্ত ব্যতিক্রম "নথি" দেয় না। প্রতিটি throwএন ব্যতিক্রমের একটি throwsধারাটিতে উল্লেখ করার প্রয়োজনীয়তা সত্ত্বেও কোডের যে কোনও লাইন RuntimeExceptionপদ্ধতিটির স্বাক্ষরে এটিকে ঘোষণা করার প্রয়োজন ছাড়াই একটি নিক্ষেপ করতে পারে।


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

1
প্রতিটি বিশেষজ্ঞের জন্য, একটি পাল্টা বিশেষজ্ঞ আছে। ব্রাজস এক্কেল, জাভা- র পরিবর্তে বিখ্যাত থিংকিংয়ের লেখক , একবার প্রো-চেকড-ব্যতিক্রমী শিবিরে ছিলেন এবং তার দিক বদলেছেন। সি # এর স্রষ্টা, এক্কেলস এবং অ্যান্ডারস হেলসবার্গের মধ্যে একটি চমৎকার আলোচনা আছে, যার ব্যতিক্রমগুলি চেক করা হয়নি।
রস প্যাটারসন

0

এটি করার মানক উপায় হল জাভা পদ্ধতির সাথে। প্রোগ্রামিং ত্রুটিগুলি ব্যতিক্রম চেক করা উচিত এবং দ্রুত ব্যর্থতা নিশ্চিত করতে ধরা উচিত নয়। চুক্তি ত্রুটিগুলি ব্যতিক্রমগুলি চেক করা হয় এবং ক্লায়েন্টের দ্বারা যথাযথভাবে পরিচালনা করা উচিত।


2
আপনি কি (উদাহরণস্বরূপ) গণিত (বা এর একটি ত্রুটির মান) NUL কে প্রোগ্রামিং ত্রুটি বা চুক্তির ত্রুটি হিসাবে বিবেচনা করছেন? আমি আপনার স্বতন্ত্রতার সাথে যাচ্ছি, তবে সীমানাটি এত পরিষ্কার কাট নয় :)
অ্যান্ড্রু

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