Bu boş çeki ve boş olmayan bir çeki harika bir şekilde yazmanın daha iyi bir yolu var mı?


102

Mantık yapmadan önce bazı kodlar üzerinde boş / değersiz bir kontrol yapmam gerekiyor . Aşağıdaki maddem var çünkü !members?.emptydoğru olmadığını düşünüyorum .

Aşağıdakileri yazmanın daha harika bir yolu var mı?

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

Yanıtlar:


211

Gerçekten bir Groovier Yolu var.

if(members){
    //Some work
}

membersbir koleksiyonsa her şeyi yapar . Boş çek ve boş çek (Boş koleksiyonlara zorlanır false). Dolu Groovy Hakikat . :)


3
Daha "harika" bir yol da, örneğin üyelerin maksimum yaşıyla ilgileniyorsanız, şunları yazabilirsiniz: members? .Age.max ()
BTakacs

9
Not: members?.age.max()Üyeler null olduğunda "boş nesnede max () yöntemi çağırılamaz" ile patlar. İhtiyacın olanmembers?.age?.max()
GreenGiant

@VinodJayachandran Evet
dmahapatro

2
hayır: GreenGiant'ın çözümü en iyisidir: her iki çözümü de kontrol edin List members = null;ve List members = [ [age: 12], [age: 24], [age: null], null ]
bunlara

2
Bu tür bir kontrol çoğu durumda işe yarıyor, ancak amacınız bir değişkenin boş olup olmadığını kontrol
etmekse

0
!members.find()

Sanırım şimdi bu sorunu çözmenin en iyi yolu yukarıdaki koddur. Groovy 1.8.1 http://docs.groovy-lang.org/docs/next/html/groovy-jdk/java/util/Collection.html#find () 'den beri çalışıyor . Örnekler:

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 boş öğe içeren koleksiyon boş değil, bu yüzden öneriniz yanlış
Yura

1
Ya koleksiyon boşsa?
Dan Markhasin

1
def lst6 = boş; lst6.find () doğru - hata oluşmaz
Zhurov Konstantin

0

Bilginize bu tür bir kod çalışır (çirkin bulabilirsiniz, hakkınızdır :)):

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

Diğer bir deyişle, bu kodda boş / boş çeklerin ikisinin de yararı yoktur:

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

def doAnotherThing(def member) {
  // Some work
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.