আপনার কোডে দমন সতর্কতাগুলি ব্যবহার করা কি ভাল অনুশীলন?


11

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

তার মতে,

কখনও কখনও জাভা জেনেরিকগুলি আপনাকে যা করতে চান তা করতে দেয় না এবং আপনাকে সংকলককে কার্যকরভাবে বলতে হবে যে আপনি যা করছেন তা কার্যকর করার সময় আইনী হবে।

তবে যদি কোনও ব্যতিক্রম ছুঁড়ে ফেলার সম্ভাবনা থাকে তবে কী হবে? সতর্কতাগুলি দমন করা কি তখন একটি খারাপ ধারণা নয়? যে জায়গাগুলিতে সমস্যা দেখা দিতে পারে সে জায়গাগুলি সম্পর্কে আমার সচেতন হওয়া উচিত নয়?

এছাড়াও, যদি অন্য কেউ আমার কোডটি পরে সংশোধন করে এবং সাপ্রেস ওয়ার্নিংস না সরিয়ে কিছু সন্দেহজনক কার্যকারিতা যুক্ত করে? কীভাবে তা এড়ানো যায় এবং / অথবা এর অন্য কোনও বিকল্প আছে?

আমি ব্যবহার করা উচিত @SuppressWarnings("unchecked")এবং @SuppressWarnings("null")?


আপডেট # 1

এই উত্তর অনুসারে (নিচের মন্তব্যগুলিতে @ জাগান্ট দ্বারা নির্দেশিত) অনুসারে, যাচাই না করা ধরণের কাস্টগুলি যেতে পারে, এই সতর্কতাগুলি দমন করা প্রয়োজনীয়।

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

অন্যান্য সতর্কতাগুলি দমন করার ক্ষেত্রে, এখনও ধূসর কিছু জায়গায়।


আপডেট # 2

অনুযায়ী ওরাকল ডক্স (এছাড়াও নিচের কিছু উত্তর উল্লেখ):

শৈলীর বিষয় হিসাবে, প্রোগ্রামারদের সর্বদা এই টীকাটি সবচেয়ে গভীরভাবে নেস্টেড উপাদানটিতে ব্যবহার করা উচিত যেখানে এটি কার্যকর। আপনি যদি কোনও নির্দিষ্ট পদ্ধতিতে কোনও সতর্কতা দমন করতে চান তবে আপনার সেই পদ্ধতিটি শ্রেণীর পরিবর্তে বর্ণিত করা উচিত।



@gnat তারা চেক করা ধরণের জাতের বিষয়ে কথা বলেন না
বিলেশ গাঙ্গুলি

1
তারা করেন : "অনিরাপদ টাইপকাস্টগুলির প্রয়োজনীয়তা অপসারণের জন্য অনেকগুলি অপরিহার্য জাভা গ্রন্থাগার কখনও আপডেট করা হয়নি those এই সতর্কতাগুলিকে দমন করা প্রয়োজনীয় যাতে আরও অন্যান্য গুরুত্বপূর্ণ সতর্কতাগুলি লক্ষ্য করা যায় এবং সংশোধন করা যায়।"
gnat

2
আমার মনে হয় সেই অনুলিপিটি নিয়ে বিষয়টি হ'ল এটি সি # - এর কিছু জাভা-নির্দিষ্ট কারণ রয়েছে যা সংকলক সতর্কতা দমন করার সাধারণ ধারণা থেকে পৃথক।

উত্তর:


26

আমার কাছে, সতর্কবাণীগুলি দমন করার পুরো বিষয়টি হ'ল আপনার প্রকল্পের জন্য "স্বাস্থ্যের ক্লিন বিল" বজায় রাখা। যদি আপনি জানেন যে আপনার পুরো কোড বেসটি পরিষ্কারভাবে সংকলন করেছে, তাৎক্ষণিকভাবে স্পষ্ট হয় যখন কেউ কিছু ভুল করে যা সমস্যাগুলির তালিকায় প্রথম সতর্কবার্তা উপস্থিত হওয়ার কারণ হয়ে থাকে। তারপরে আপনি ত্রুটিটি ঠিক করতে বা এটি দমন করতে পারেন যদি আপনি প্রমাণ করতে পারেন যে এটি উত্সাহজনক।

তবে যদি আপনার এখানে 21 টি সতর্কতা শুরু হয়, তবে এটির বেশি সম্ভাবনা রয়েছে যে কেউ যখন এটির কারণ হয় তখন আপনি 22 তমটিকে অগ্রাহ্য করবেন এবং আপনি এটি নির্দোষ বলে পরীক্ষা করেন না। এর অর্থ হ'ল সমস্যাগুলি আপনার কোড বেসে প্রবেশ করতে পারে এবং আপনি কখনই লক্ষ্য করবেন না।

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

সম্পাদন করা

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


1
আমি আংশিকভাবে একমত যে "ক্লিন" স্লেট থেকে শুরু করা আপনাকে পরবর্তী সতর্কতাগুলি ধরতে সহায়তা করে, সত্যটি এই যে কোডটি পরিষ্কারভাবে সংকলন করে সে পরিষ্কারভাবে চলতে পারে না।
user949300

আমার কর্মক্ষেত্রে সমস্যাটি হ'ল আমি প্রায়শই সতর্কবাণীগুলিতে চলে যাই যা অন্য কেউ চাপা দিয়েছিল কারণ তারা কী বলছে তা তারা বুঝতে পারছিল না। সুতরাং আমি অনুমান করি যে কোনও সতর্কতার যোগ্যতা আছে কিনা তা একটি বিষয়গত বিষয়। : /
ট্রেজকাজ

16

সতর্কতা দমন করা এমন একটি বিষয় যা চরম যত্ন সহকারে করা দরকার।

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

if (x = someFunction ()) { ... }

একটি সতর্কতা দেয় কিন্তু

if ((x = someFunction ())) { ... }

না। প্রথম ক্ষেত্রে একটি সতর্কতা ধরে নেওয়া হচ্ছে যে আপনি সম্ভবত == এবং না = বোঝাতে চেয়েছেন। দ্বিতীয় ক্ষেত্রে কোনও সতর্কবাণী নেই কারণ অতিরিক্ত বন্ধনী সংকলকটিকে "আমি জানি আমি কী করছি" tell অবশ্যই ভাল হবে

if ((x = someFunction ()) != 0) { ... }

বা দুটি লাইন ব্যবহার করে।

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

তবে কিছু লোক সতর্কবার্তা থেকে মুক্তি পাওয়ার জন্য সতর্কতাগুলি অক্ষম করে, কারণ তারা বৈধ সতর্কতার কারণটি খুঁজে বের করতে এবং প্রথমে কারণটি স্থির করতে খুব অলস। অথবা তারা এমন কোনও কোড লেখার চেষ্টাও করে না যা সতর্কতা থেকে মুক্ত। এটি করা একটি অত্যন্ত অস্বাস্থ্যকর জিনিস।


2
আমি মনে করি আপনি আপনার দ্বিতীয় এবং তৃতীয় উদাহরণগুলিতে কিছু বন্ধ হওয়া প্রথম বন্ধনী অনুপস্থিত হতে পারেন।
বিট্রি

1
শেষ বাক্যটির সাথে পুরোপুরি একমত
usr-local-ΕΨΗΕΛΩΝ 11:48

7

একটি সম্পূর্ণ পদ্ধতির জন্য সতর্কতা দমন সন্দেহজনক। একটি মন্তব্য সহ নির্দিষ্ট লাইনের জন্য সতর্কতাগুলি দমন করা ভাল । যেমন

@SuppressWarnings("unchecked") Foo foo = (Foo)object; // Using old library requires this cast

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.