2012-04-16 10 views
7

जब आप इंडेक्सऑफ के रिटर्न वैल्यू के लिए परीक्षण कर रहे हों तो आप आमतौर पर क्या लिखते हैं?अनुक्रमणिका के वापसी मूल्य का परीक्षण करने के लिए सर्वोत्तम अभ्यास

if str.indexOf("a") < 0 

बनाम

if str.indexOf("a") == -1 

चाहेंगे एक विधि दूसरे के ऊपर प्राथमिकता दी जानी?

मैं वास्तव में किसी भी भाषा में किसी भी फ़ंक्शन के लिए यह प्रश्न प्रस्तुत कर रहा हूं जो त्रुटि पर -1 देता है।

मैं आमतौर पर < 0 दृष्टिकोण पसंद करता हूं, क्योंकि अगर किसी अन्य मामले पर फ़ंक्शन 2 को वापस करने के लिए बढ़ाया जाता है, तो कोड अभी भी काम करेगा।

हालांकि, मुझे लगता है कि == -1 दृष्टिकोण अधिक सामान्यतः उपयोग किया जाता है। क्या कोई कारण है?

+1

जावा के मामले में, indexOf स्पष्ट रूप से निर्दिष्ट करता है कि यदि आपकी स्ट्रिंग में कोई मिलान नहीं मिलता है तो यह -1 वापस आ जाएगा। इसलिए, यह बदलना एपीआई में एक ब्रेक होगा और इसलिए हम इस तथ्य पर भरोसा कर सकते हैं कि यह -1 लौटाएगा। लेकिन मैं भी '== - 1' –

+0

' '(0 ~ str.indexOf (" a ")) पर '<0' का उपयोग करना पसंद करता हूं)' थोड़ा कम वर्बोज़ है। –

उत्तर

3

मैं सामान्य सिद्धांत को लागू करने का प्रयास करता हूं जो "त्रुटि शर्तों" के लिए परीक्षण जितना संभव हो उतना चौड़ा होना चाहिए। इसलिए मैं == -1 के बजाय < 0 का उपयोग करूंगा।

यह एक सिद्धांत है जिसे कक्षाओं के दौरान मेरी सीएस डिग्री के दौरान औपचारिक तरीकों में पढ़ाया जाता था।

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

लें:

i = 0; 
while (i < 10) { 
    ++i; 
    // something else increments i 
} 

वी.एस.

i = 0; 
while (i != 10) { 
    ++i; 
    // something else increments i 
} 

बाद वाला मामला असफल हो सकता है - पूर्व मामला नहीं होगा।

+0

लेकिन इस मामले में जावा एपीआई विशेष रूप से हमें बता रहा है कि -1 वापस आ जाएगा। – rk2010

+0

यह है, लेकिन यह निहित है कि 0 या उच्चतम का पूर्णांक मूल्य सफलता पर वापस कर दिया जाएगा, इसलिए विपरीत (यानी '<0') एक पूरी तरह से वैध काउंटर परीक्षण है। – Alnitak

+0

यदि -2 वापस आ गया है, तो इसका मतलब यह नहीं है कि "नहीं मिला"। यह अपरिभाषित है .. क्या आप कोड को आगे बढ़ने की उम्मीद नहीं करेंगे और नलपॉइंटर या कुछ त्रुटि का कारण बनेंगे? इस तरह कम से कम JVM समस्या को प्रकाश में लाया जा सकता है। – rk2010

2

मैं < 0 दृष्टिकोण भी पसंद करूंगा। कारण जावास्क्रिप्ट के अनुसार == -1 दृष्टिकोण व्यापक रूप से उपयोग किया जाता है, इस तथ्य के कारण यह है कि यदि सूचकांक गुम हो जाता है और "विस्तारित फ़ंक्शन" का मामला कभी नहीं होगा, तो फ़ंक्शन वास्तव में वापस आ जाएंगे।

1

में नहीं होती लगभग सभी सर्वश्रेष्ठ रूप से संभवतः जावा दस्तावेज़ में रहना उचित मामलों में माना जाता है। जावा डॉक देखें: http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf%28int%29

... इसके अनुसार: -1 वापस कर दिया जाएगा।

तो मैं हमेशा -1 की जांच करता। यदि आपके पास जांच करने के लिए एक विशिष्ट मान है, तो जावा एपीआई में भावी कोड परिवर्तनों के विरुद्ध सुरक्षा के लिए उस विशिष्ट मूल्य की जांच करना सुरक्षित है।

उदाहरण के लिए, यदि आपको -2 मिलता है, तो इसका मतलब है कि आपके JVM में कुछ गंभीरता से गलत है। इसका मतलब यह नहीं है "नहीं मिला"। कोड आगे बढ़ने और अपवाद/त्रुटि का कारण बनना बेहतर होगा।

0

संदीप नायर बताते हैं कि जावाडाक बताता है, लेकिन मैं थोड़ा टिप्पणी करना चाहता हूं।

दोनों ठीक काम करेंगे और मैं नहीं कहूंगा कि एक दूसरे की तुलना में "बेहतर" है। == -1 लिखने का कारण यह है कि एक सामान्य सम्मेलन है कि खोज विधियों को वापस -1 यदि "सामान नहीं मिल सका"। हम 0 का उपयोग नहीं कर सकते हैं क्योंकि इन्हें सरणी आदि में सूचकांक के रूप में उपयोग किया जाता है।

तो, यह राय का विषय है। जब तक सम्मेलन रहता है, इससे कोई फर्क नहीं पड़ता।

0

मैं -1 का उपयोग करता हूं क्योंकि मैं यह जांचना चाहता हूं कि मैं क्या उम्मीद कर रहा हूं।

मुझे -2 की उम्मीद नहीं है। अगर मुझे -2 मिल गया, तो शायद इसका मतलब होगा कि मेरे पास कुछ समस्याएं हैं। आप जो भी उम्मीद कर रहे हैं उसकी जांच करना की अपेक्षा से बेहतर है।

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