2010-12-30 2 views
7

इस विधि (परीक्षण) को वापसी मूल्य की आवश्यकता क्यों है (यह हमेशा सत्य है)?विधि को कथन के बाद वापसी मान की आवश्यकता क्यों होती है जो हमेशा सच होती है?

public boolean test() { //This method must return a result of type boolean 
    if (true) { 
     return true; // always return true 
    } 
} 

और जब मैं वापसी मान जोड़ा है तो उसका "डेड कोड" के रूप में चेतावनी देते हैं। तो, क्यों स्वीकार पहले test() विधि

public boolean test(int i) { 
    if (true) { 
     return true; 
    } else { //Dead code 
     return false; 
    } 
} 
+3

एक बयान हमेशा सच होने जा रहा है, तो आप बस को पूरी तरह बयान नहीं निकाल सकते? –

+0

यह सिर्फ परीक्षण है।मेरे पास कोई भी विधि नहीं है जो हमेशा सच हो जाती है :) –

+3

तो यह हमेशा सत्य नहीं होगा, इसलिए कोड के माध्यम से एक से अधिक पथ हैं इसलिए आपको प्रत्येक पथ –

उत्तर

11

विधि वापसी विश्लेषण if स्थिति का विश्लेषण नहीं करता है यह देखने के लिए कि यह हमेशा सत्य या गलत है, आमतौर पर यह संकलन-समय स्थिर नहीं होगा (अन्यथा आप पहले स्थान पर if नहीं लिखेंगे)। यह बस देखता है कि if है जो लिया जा सकता है या नहीं लिया जा सकता है, और यदि यह नहीं लिया जाता है तो विधि कोई मान नहीं लौटाती है, इसलिए त्रुटि।

मृत कोड विश्लेषण विधि वापसी विश्लेषण के अलग-अलग पास में किया जाता है, जो कुछ और गहराई से विश्लेषण करता है जो शाखा स्थितियों के अंदर दिखता है।

मेरा पूरी तरह से अनौपचारिक अनुमान यह व्यवहार है कि संकलक कैसे विकसित किया गया था इसका एक आर्टेफैक्ट है; विधि वापसी विश्लेषण संकलन का एक महत्वपूर्ण हिस्सा है, यह सुनिश्चित करने के लिए कि आप अंत में एक वैध प्रोग्राम प्राप्त करें, और इसलिए पहले लागू की गई मूल सुविधाओं में से एक था। डेड कोड विश्लेषण एक 'अच्छा होना है' और बाद में इसे अधिक परिष्कृत एल्गोरिदम का उपयोग करके लागू किया गया था (क्योंकि कोर कंपाइलर बिट्स उस चरण द्वारा समाप्त किए गए थे)

+0

+1 यह इंगित करने के लिए कि संकलक – Babar

2

यह विश्लेषण संकलक करता है की गहराई का एक परिणाम है नहीं है।

1

यह विधि कुछ भी नहीं करती है, इसलिए हाँ, यह है मृत कोड यदि विधि हमेशा सच होती है, तो आपको इसे कॉल करने की आवश्यकता नहीं है, बस इसके बजाय true का उपयोग करें।

+0

की स्थिति का मूल्यांकन नहीं करेगा, यह केवल परीक्षण है। मेरे पास कोई भी विधि नहीं है जो हमेशा सच हो जाती है :) –

+1

@ हिलाल, संकलक सामान्य बग का पता लगाने की कोशिश करता है, यह सभी संभावित सैद्धांतिक मामलों को संभालने का प्रयास नहीं करता है और आप जो भी हो सकता है उसे कम करने की कोशिश नहीं करते हैं। –

1

जावा में, यदि आप रिटर्न टाइप (बूलियन) निर्दिष्ट करते हैं तो आपको स्पष्ट रूप से मान निर्दिष्ट करना होगा, भले ही यह हमेशा समान हो। इससे सवाल उठता है: यदि यह हमेशा एक जैसा है, तो कुछ भी क्यों लौटाएं? आप पहले से ही कॉलिंग कोड में जवाब जानते हैं।

क्यों सिर्फ लिख नहीं:

public boolean test() { 
    return true; 
} 

अपने प्रश्न के दूसरे भाग के रूप में, संकलक देखता है कि दूसरा रास्ता अगर बयान में कभी नहीं लिया जाता है और आप इसके बारे में एक चेतावनी देता है।

0

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

if (someBoolean){ 
    return true; 
} 

कुछ काम नहीं करेगा क्योंकि कुछ भी वास्तविक या गलत हो सकता है। यदि आपकी विधि को कुछ वापस करना होगा और कुछ बोलेन झूठा है, तो यह कुछ भी वापस नहीं करेगा। तो इस मामले में, आप कर सकते हैं:

if (someBoolean){ 
    return true; 
} 

वापसी झूठी;

या बस

return someBoolean;