2009-07-30 13 views
18

यह वास्तव में एक "प्रश्न" नहीं है इसलिए मैं इसे सीडब्ल्यू बना रहा हूं।क्या आप दावे का उपयोग करते हैं?

assert 

कीवर्ड बहुत अच्छा है!

इसे आपके द्वारा लिखे गए कोड के साथ अपने आत्मविश्वास को महसूस करना चाहिए, लेकिन आज तक जब मैं एक छोटी परीक्षा कक्षा (< 20 लाइनें) बना रहा था, मुझे एहसास हुआ कि इसे कभी भी इसका इस्तेमाल नहीं किया गया था।

बिल्ली! मैं मुश्किल से लॉगजर का उपयोग करता हूं जो वास्तव में बहुत उपयोगी है, लेकिन आज तक मुझे एहसास नहीं हुआ कि मैं दावे का उपयोग नहीं करता हूं।

क्या आप दावा का उपयोग करते हैं? यदि नहीं, तो क्या कारण है?

+2

तो क्या लोग "हाँ" और "नहीं" का जवाब देते हैं? वह कितना उपयोगी है? SO पर जोर देने पर कई सारे जवाब हैं, शायद आपको उनमें से कुछ पढ़ना चाहिए? –

+4

क्या आप नियमित रूप से कोडिंग में नील का उपयोग करते हैं? – OscarRyz

उत्तर

2

नहीं, कभी उनका उपयोग न करें। डुनो क्यों, आदत में कभी नहीं मिला।

0

मैं उनका उपयोग नहीं करता, हालांकि मुझे यकीन नहीं है कि क्यों या तो।

यदि आप यूनिट परीक्षण करते हैं, जैसे कि न्यूटिट के साथ, आप निश्चित रूप से अपने परीक्षण परिणामों को सत्यापित करने के लिए उन्हें हमेशा उपयोग करेंगे।

15

मुझे 90 के दशक में बहुत से दावों का उपयोग करने के लिए सिखाया गया था और उन्होंने बहुत समझदारी की। यह अच्छी रक्षात्मक कोडिंग है।

हालांकि, मुझे लगता है कि अब यह इकाई परीक्षण द्वारा अतिरंजित किया गया है जो वास्तव में कोड को चलाने के लिए मजबूर करता है और बताता है कि यह कहां टूटा हुआ है। डीबग आवेषणों में किसी को वास्तव में डीबग कोड चलाने और UI या लॉग देखने की आवश्यकता होती है। यूनिट परीक्षण इसे स्वचालित कर सकता है।

+3

परीक्षण के दौरान, चूहे शायद संचार केबल के माध्यम से नहीं चलेगा, कोई भी गेम खेल रहा है, स्मृति को समाप्त नहीं करेगा, और लॉग फाइलें हार्ड ड्राइव को भर नहीं पाएंगी। ये चीजें तब हो सकती हैं जब आपका प्रोग्राम उत्पादन वातावरण में चलता है। [हुन 00] व्यावहारिक प्रोग्रामर – citn

+1

तो क्या आप दावा कर रहे हैं कि किसी भी तरह से इन समस्याओं को हल करने के लिए डीबग आवेषण? या आप कह रहे हैं कि डीबग आवेषण, इकाई परीक्षण इत्यादि इन समस्याओं को हल नहीं कर सकते हैं? या यह कि सभी परीक्षण खराब है इसलिए ऐसा नहीं करते? –

+7

मैं इस जवाब के साथ दृढ़ता से असहमत हूं। यह अतिसंवेदनशील नहीं है, इसे पूरक किया गया है। यूनिट परीक्षण दावे को प्रतिस्थापित नहीं करते हैं। प्रोग्रामिंग गलतियों से बचने के लिए दावा बहुत उपयोगी हैं, जैसे किसी विधि को शून्य से गुजरना, जो शून्य को स्वीकार नहीं करता है। यह आपकी आंखों के लिए ठीक है, आपका पैरामीटर शून्य नहीं हो सकता है, इसलिए आपके पास जगह पर (अगर param! = Null) नहीं है ... –

14

मैं उन्हें हर समय उपयोग करता हूं। वे "क्रैश शुरुआती" दर्शन का अभ्यास करने का एक अच्छा तरीका हैं, यह हल करना बेहतर है कि खराब/दूषित आउटपुट से निपटने के लिए एक दावा विफल क्यों हुआ।

मुद्दा यह है कि आपको इसे आदत बनाना है। मैं शायद ही कभी किसी भी मध्य मैदान को देखता हूं, लोगों का या तो इसका उपयोग नहीं किया जाता है और लगभग कभी उनका उपयोग नहीं करते हैं या लोग उनका उपयोग करते हैं और वे पूरे कोड में कठोर रूप से भरे हुए हैं। आपको सिर्फ ध्यान देने की मानसिकता में जाना होगा "अरे अरे, मैं यहां कुछ समझने की निहितार्थ हूं, मुझे स्पष्ट रूप से इसकी पुष्टि करें (आकलन) '

+1

जो मैंने आपके उत्तर में पढ़ा है, मुझे लगता है कि एक सत्यापन बेहतर होगा, क्योंकि सभी जोर देने के बाद उत्पादन कोड पर हटा दिया जाना है। मुख्य उद्देश्य बीटा उत्पाद में महंगा चेक अप करना था। – OscarRyz

+4

उत्पादन कोड में सम्मिलित नहीं किया जाना चाहिए ... वे समझने में बहुत उपयोगी हैं कि प्रक्रिया क्यों विफल रही है (4 या 5 परतों में शून्य प्रसार के बारे में सोचें, यह शून्य कहाँ से आता है?)। और मुझे प्रदर्शन हिट पर शुरू न करें ... –

3

मैं उनका उपयोग नहीं करता हूं। यूनिट परीक्षण आपके कोड का परीक्षण करने के लिए पर्याप्त होना चाहिए। इसके अलावा, चूंकि वे डिफ़ॉल्ट रूप से अक्षम हैं, इसलिए वे आम तौर पर पूरी तरह से अनदेखा कर रहे हैं। फिर वे बेकार दावे के साथ आपके कोड को अव्यवस्थित करते हैं जो टिप्पणी के रूप में बेहतर व्यक्त किया जा सकता है।

आप वास्तव में इस की जरूरत है, हालांकि, कुछ पुस्तकालयों अभिकथन स्थिर तरीकों आप कॉल कर सकते हैं कि नहीं छोड़ दिया जाएगा है - ये भी एक बहुत अधिक पढ़े जाने योग्य हैं, क्योंकि ज़ोर कीवर्ड असामान्य है और तुरंत एक "WTF कारण हो सकता है "पल, लेकिन Assert.x विधियां केवल वे विधियां हैं जिनके माध्यम से पता लगाया जा सकता है। वसंत ढांचे, विशेष रूप से, एक दावा पुस्तकालय का उपयोग करता है।

+0

टिप्पणियां पुरानी हो सकती हैं, या सादा गलत हो सकती हैं, जबकि एक दावा कोड में एक अनुबंध है। मैं इस बात से असहमत हूं कि दावे कोड को अव्यवस्थित करते हैं, और निश्चित रूप से असहमत हैं कि टिप्पणियां व्यक्त करने में टिप्पणियां बेहतर होती हैं। कोई भी जो इसे डीबग करने के लिए कोड के साथ कोड चला रहा है, उसे निश्चित रूप से दावा करना चाहिए। मुझे लगता है कि यदि आप इसका कभी भी उपयोग नहीं करते हैं, तो जोरदार कीवर्ड असामान्य है, लेकिन अपठनीय है? इससे सहमत नहीं है कि इससे कोई फर्क नहीं पड़ता कि आप अपने दावे, अंतर्निर्मित या पुस्तकालय के लिए किस विधि का उपयोग करते हैं। – Sean

+0

दावा, क्योंकि वे डिफ़ॉल्ट रूप से अक्षम हैं, कोड टिप्पणियों के समान समस्याएं हैं। वे "पुराने, या सादे गलत" हो सकते हैं - क्योंकि आपको उन्हें स्पष्ट रूप से चालू करना है, इसलिए, वे हमेशा यह नहीं मानते कि उन्हें क्या करना चाहिए और उनकी विफलताओं को तब तक नहीं देखा जाता जब तक कि वे स्वयं प्रासंगिक नहीं हो सकते। – MetroidFan2002

4

संक्षिप्त उत्तर - हाँ।

लंबा उत्तर - हमेशा नहीं, लेकिन अक्सर। मैं आमतौर पर त्रुटियों के लिए दावाों का उपयोग करता हूं, मुझे पता है कि मैं कुछ भी नहीं कर सकता (जब प्रोग्राम चल रहा है) और लॉगिंग वास्तव में आवश्यक नहीं है। उदाहरण के लिए - यदि मुझे यह जांचना है कि कोई निश्चित मान सीमा से बाहर है या यदि कोई सूचक न्यूल है, भले ही उसके पास कुछ मूल्य हो।

अन्य सामग्री जैसे "पार्सिंग फाइल" और "फ़ाइल नहीं मिल सका", मैं आमतौर पर अपवाद फेंक देता हूं।इस तरह से मैं त्रुटि लॉग कर सकता हूं और इसके बजाए कुछ असफल सुरक्षित फ़ाइल/विधि का उपयोग कर सकता हूं।

और मैं काफी Falaina साथ से सहमत हैं, तुम सच में यह एक बिंदु की सूचना के लिए करना चाहिए - "! अरे मैं कुछ मान्यताओं यहाँ बना रही हूँ"

1

मैं त्रुटि स्थितियों के लिए जाँच करें और बजाय अपवाद फेंक देते हैं। कारण यह है कि मैं इन परिस्थितियों को हमेशा उत्पादन में देखना चाहता हूं, यहां तक ​​कि उत्पादन में, और अपवादों के बजाय असफल स्थिति के आसान संचालन के लिए अपवाद प्रदान करते हैं।

10

मैं यह सुनिश्चित करने के लिए दावे का उपयोग करता हूं कि मैं अपने कोड में त्रुटियों को लागू नहीं करता हूं। अगर मुझे पता है कि एक मूल्य मानचित्र में होना चाहिए, तो मैं इसके लिए जोर देता हूं (जोरदार कीवर्ड का उपयोग करके)। अगर मुझे पता है कि पैरामीटर कभी शून्य नहीं होना चाहिए, तो मैं इसके लिए ज़ोर देता हूं। अगर मुझे पता है कि पैरामीटर शून्य हो सकता है, तो मैं इसे जांचूंगा और उपयुक्त अपवाद फेंक दूंगा।

मैंने इसे कोड पूर्ण या प्रभावी जावा पर पढ़ा - प्रोग्रामिंग त्रुटियों का पता लगाने के लिए assrtions का उपयोग किया जाना चाहिए - असाधारण लेकिन संभावित स्थितियों को संभालने के लिए अपवादों का उपयोग किया जाना चाहिए। आपको अपने कोड पर हर विधि पर शून्य की जांच करने की आवश्यकता नहीं है यदि आप जानते हैं कि मान शून्य नहीं होगा (जैसा कि अनुबंध द्वारा परिभाषित किया गया है), लेकिन यह मानने में कोई दिक्कत नहीं होती है कि कोई मान शून्य नहीं है। दावे केवल तभी सक्षम होते हैं जब आप वीएम को पैरामीटर-एए निर्दिष्ट करते हैं और यदि अक्षम हो तो उन्हें आपके आवेदन के प्रदर्शन को प्रभावित नहीं करना चाहिए।

आपको और भी लॉगिंग का उपयोग करना चाहिए :-)। पता लगाएं कि ट्रेस, डीबग और जानकारी का उपयोग कब करें और सुनिश्चित करें कि आप जो कुछ भी अपना आवेदन करते हैं उसे लॉग करते हैं। यह जीवन को इतना आसान बनाता है जब आपको यह पता लगाना पड़ता है कि उत्पादन वातावरण में कुछ क्यों काम नहीं कर रहा है।

+3

"प्रोग्रामिंग त्रुटियों का पता लगाने के लिए दावाों का उपयोग किया जाना चाहिए" ** बिल्कुल ** +1 –

0

नहीं, मैं उनका उपयोग नहीं करता हूं।

मुझे सिखाया गया था कि आवेषणों को 'उत्पादन' कोड में उपयोग नहीं किया जाना चाहिए, और इससे पहले कि मैं कुछ भी उपयोग करना शुरू कर दूं जो मुझे किसी भी तरह से हटाना है - जो मैंने सीखा है उसके अनुसार - मैं मान्य शर्तों को अपवाद के साथ चिपकता हूं।

0

मैंने कभी उनका उपयोग नहीं किया था, लेकिन मेरे पास अपने आखिरी कार्यक्रम को डीबग करने का एक भयानक समय था, और एक बिंदु पर लॉगिंग हो रही थी जब चर शून्य थे या मेरे पास अपेक्षित मूल्य नहीं थे। एक बार जब मैं इसे सब काम कर लेता हूं तो मैंने सफलतापूर्वक चलाने के लिए मेरे प्रोग्राम की हर चीज की ज़ोर दी।

1

जावा assert कीवर्ड बहुत आधा assed है (प्रोग्राम को -ea कमांडलाइन विकल्प के साथ चलाने की जरूरत है) तो मैं खुद को आवेषण के बजाय अपवादों पर भरोसा करता हूं।

4

यूनिट परीक्षण के बाद दावाों के लिए एकमात्र असली उपयोग अन्य प्रोग्रामर के लिए एक विधि के आविष्कार को संवाद करना है। और टिप्पणियों की तुलना में वास्तविक कोड में ऐसा करना बेहतर होता है जिसे वे वैसे भी अनदेखा करेंगे। एक जोर से नजरअंदाज करना मुश्किल है!

0

नहीं, लेकिन प्रतीक्षा नहीं कर सकता। मैं जूनिट के साथ सबकुछ परीक्षण करता था, लेकिन वह स्कूल था, छोटी परियोजनाओं का कोई दबाव नहीं था। मैं अब वास्तविक जीवन में हूं, मुझे कल इस कोड को पूरा करना होगा ....

2

यदि आपको जोर देना पसंद है, तो आप अनुबंधों को पसंद करेंगे। वे मूल रूप से अधिक परिस्थितियों में विस्तारित आवेषण का विचार हैं।

2

हाँ! हमेशा! कीवर्ड हर भाषा में मेरा सबसे अच्छा दोस्त है!

आवेषण का उपयोग न करने का कोई वास्तविक कारण नहीं है, वे सुनिश्चित करते हैं कि इनपुट मानों और राज्यों पर किए गए मूल मान्यताओं को कायम रखा जाता है।

यदि कोई दावा विफल रहता है, तो इसका मतलब है कि मुझे अपनी धारणाओं का पुनर्मूल्यांकन करने और नए विदेशी इनपुट को संभालने के लिए कोड अपडेट करने की आवश्यकता है जिसे मैंने वर्तमान संशोधन लिखते समय नहीं सोचा था। इसके बारे में क्या पसंद नहीं है?

प्रोग्रामिंग में सामान्य रूप से, यह एक ऐसा उपकरण है जो ठीक से उपयोग होने पर ही शक्तिशाली होता है।

2

हाँ, मैं का उपयोग हर समय इस बात पर ज़ोर, मूल रूप से जब भी मैं एक धारणा है कि बना रही हूँ:

  1. एक अत्यंत साधारण विधेय के साथ की जाँच की जा सकती है।
  2. बस पास के कोड को पढ़ने से स्पष्ट रूप से सच नहीं है।

हालांकि, के लिए दावा है कि प्रदर्शन पर बहुत कम प्रभाव होने की संभावना है, मैं assert के बजाय डी प्रोग्रामिंग भाषा मानक पुस्तकालय में enforce समारोह का उपयोग करें। यह मूल रूप से assert जैसा ही है, सिवाय इसके कि यह रिलीज मोड में रहता है। अधिक महंगे दावे के लिए, मैं assert का उपयोग करता हूं, जिसे रिलीज मोड बिल्ड से हटा दिया जाता है।

संबंधित मुद्दे