क्या इस अशक्त जांच को लिखने का एक बेहतर तरीका है, और एक गैर-खाली चेक, ग्रूवी में?


101

मुझे कुछ तर्क करने से पहले कुछ कोड पर एक अशक्त / खाली जांच करने की आवश्यकता है । मेरे पास नीचे आइटम है, क्योंकि मुझे लगता !members?.emptyहै कि सही नहीं है।

निम्नलिखित लिखने के लिए एक ग्रोवर तरीका है?

if (members && !members.empty) {
    // Some Work
}

जवाबों:


209

वहाँ वास्तव में एक Groovier मार्ग है।

if(members){
    //Some work
}

सब कुछ है अगर membersएक संग्रह है। रिक्त चेक के साथ-साथ खाली चेक (खाली संग्रह के लिए मजबूर हैं false)। हेल ग्रूवी ट्रुथ । :)


3
एक अधिक "ग्रोवर" तरीका यह है कि उदाहरण के लिए यदि आप सदस्यों में से अधिकतम आयु में रुचि रखते हैं तो आप निम्नलिखित लिख सकते हैं: सदस्य .age.max ()
BTakacs

9
नोट: members?.age.max()सदस्यों के अशक्त होने पर "शून्य ऑब्जेक्ट पर अधिकतम विधि () लागू नहीं कर सकता है"। आपको आवश्यकता होगीmembers?.age?.max()
GreenGiant

@VinodJayachandran हां
dhahapatro

2
नहीं: GreenGiant का समाधान सबसे अच्छा है: दोनों समाधानों के खिलाफ जाँच करें List members = null;औरList members = [ [age: 12], [age: 24], [age: null], null ]
BTakacs

2
इस प्रकार का चेक अधिकांश मामलों के लिए काम कर रहा है, लेकिन यदि आपका उद्देश्य यह जांचना है कि एक चर शून्य है या नहीं, तो आप एक किनारे के मामले में समाप्त हो सकते हैं जहां चर शून्य नहीं है, लेकिन एक बूलियन झूठा है
निकोसदिम

0
!members.find()

मुझे लगता है कि अब इस मुद्दे को हल करने का सबसे अच्छा तरीका कोड है। यह ग्रूवी 1.8.1 http://docs.groovy-lang.org/docs/next/html/groovy-jdk/java/util/Collection.html#find () से काम करता है । उदाहरण:

def lst1 = []
assert !lst1.find()

def lst2 = [null]
assert !lst2.find()

def lst3 = [null,2,null]
assert lst3.find()

def lst4 = [null,null,null]
assert !lst4.find()

def lst5 = [null, 0, 0.0, false, '', [], 42, 43]
assert lst5.find() == 42

def lst6 = null; 
assert !lst6.find()

1
संग्रह जिसमें 1 शून्य तत्व खाली नहीं है, इसलिए आपका सुझाव गलत है
यूरा

1
क्या होगा अगर संग्रह शून्य है?
डेन मार्खासिन

1
def lst6 = null; मुखर! lst6.find () यह सही है - कोई त्रुटि नहीं होती है
झवरोव कोन्स्टेंटिन

0

FYI करें इस तरह का कोड काम करता है (आप इसे बदसूरत पा सकते हैं, यह आपका अधिकार है :)):

def list = null
list.each { println it }
soSomething()

दूसरे शब्दों में, इस कोड में बेकार / खाली दोनों चेक हैं :

if (members && !members.empty) {
    members.each { doAnotherThing it }
}

def doAnotherThing(def member) {
  // Some work
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.