2012-06-12 13 views
12

मैं निम्न विधि जहाँ मैं event.status संपत्ति का परीक्षण करना चाहते ही अगर status में पारित किया गया है है:टेस्ट केवल तभी चर में रिक्त नहीं है अगर बयान

def findEvent(String desc, String status = null, Collection events) { 
     return events.find { 
      it.description == desc && \\If status is not null: it.status == status 
     } 

     throw new Exception("Review Event Record Not Found: ${desc}") 
} 

मैंने सोचा कि यह इस तरह किया जा सकता है, लेकिन यह काम नहीं कर रहा है:

def findEvent(String desc, String status = null, Collection events) { 
     return events.find { 
      it.description == desc && (status != null ?: {it.status == status}) 
     } 

     throw new Exception("Review Event Record Not Found: ${desc}") 
} 

क्या ऐसा कोई तरीका हो सकता है? या मुझे इस तरह कुछ वापस जाना है:

if (status != null) { 
    return events.find { 
     it.description == desc && it.status == status 
    } 
} else if (status == null) { 
    return events.find { 
     it.description == desc 
    } 
} 

क्या कोई सर्वोत्तम अभ्यास है?

उत्तर

21

मुझे विश्वास नहीं है कि यह अभिव्यक्ति संवेदनात्मक है।

एल्विस का अर्थ है "यदि सत्य है, तो मूल्य का उपयोग करें, अन्यथा इस अन्य चीज़ का उपयोग करें।"

आपकी "अन्य चीज़" एक बंद है, और मूल्य status != null है, इनमें से कोई भी ऐसा नहीं लगता है जो आप चाहते हैं। यदि status शून्य है, एल्विस true कहता है। यदि ऐसा नहीं है, तो आपको बंद करने की एक अतिरिक्त परत मिलती है।

तुम सिर्फ क्यों उपयोग नहीं कर सकते:

(it.description == desc) && ((status == null) || (it.status == status)) 

यहां तक ​​कि अगर कि नहीं काम करते हैं, आप सभी की जरूरत उचित मान देने के लिए बंद करने का अधिकार है, क्या किया? दो अलग find कॉल बनाने की कोई आवश्यकता नहीं है, बस एक मध्यवर्ती चर का उपयोग करें।

+0

(it.description == desc) && ((status == null) || (it.status == स्थिति)) सही दिखता है। मैं पुष्टि करता हूं कि जब मुझे मौका मिलता है तो यह काम करता है। मान्य है, यह पहली बार है जब मुझे कभी एल्विस ऑपरेटर का सामना करना पड़ा था, इसलिए मैं अंधेरे में खेल रहा था। चीयर्स, डेव –