มีวิธีที่ดีกว่าในการเขียนเช็คว่างนี้หรือไม่


102

ฉันต้องทำการตรวจสอบค่าว่าง / ค่าว่างในบางรหัสก่อนที่จะใช้ตรรกะบางอย่าง ฉันมีรายการด้านล่างเพราะฉันรู้สึกว่า!members?.emptyไม่ถูกต้อง

มีวิธีที่ง่ายกว่าในการเขียนต่อไปนี้หรือไม่?

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

คำตอบ:


211

มีทาง Groovier แน่นอน

if(members){
    //Some work
}

ทำทุกอย่างถ้าmembersเป็นคอลเลกชัน การตรวจสอบค่าว่างและการตรวจสอบที่ว่างเปล่า (คอลเลกชันที่ว่างเปล่าจะถูกบังคับให้false) ลูกเห็บGroovy ความจริง :)


3
วิธีที่ "ยิ่งขึ้น" มากขึ้นคือตัวอย่างเช่นหากคุณสนใจอายุสูงสุดของสมาชิกคุณสามารถเขียนข้อความต่อไปนี้: Members? .age.max ()
BTakacs

9
หมายเหตุ: members?.age.max()ระเบิดด้วย "Cannot invoke method max () on null object" เมื่อสมาชิกเป็น null คุณจะต้องmembers?.age?.max()
GreenGiant

@VinodJayachandran Yes
dmahapatro

2
ไม่: โซลูชันของ GreenGiant ดีที่สุด: ตรวจสอบList members = null;และList members = [ [age: 12], [age: 24], [age: null], null ]เทียบกับโซลูชันทั้งสอง
BTakacs

2
การตรวจสอบประเภทนี้ใช้งานได้กับกรณีส่วนใหญ่ แต่หากจุดประสงค์ของคุณคือการตรวจสอบว่าตัวแปรเป็นโมฆะหรือไม่คุณอาจจบลงด้วยกรณีขอบที่ตัวแปรไม่เป็นโมฆะ แต่เป็นเท็จบูลีน
NikosDim

0
!members.find()

ฉันคิดว่าตอนนี้วิธีที่ดีที่สุดในการแก้ปัญหานี้คือโค้ดด้านบน มันทำงานตั้งแต่ Groovy 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 รายการไม่ว่างเปล่าดังนั้นคำแนะนำของคุณจึงไม่ถูกต้อง
Yura

1
จะเกิดอะไรขึ้นถ้าคอลเล็กชันเป็นโมฆะ
Dan Markhasin

1
def lst6 = null; ยืนยัน! lst6.find () ถูกต้อง - ไม่มีข้อผิดพลาดเกิดขึ้น
Zhurov Konstantin

0

FYI รหัสประเภทนี้ใช้งานได้ (คุณสามารถพบว่ามันน่าเกลียดมันเป็นสิทธิ์ของคุณ :)):

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

กล่าวอีกนัยหนึ่งรหัสนี้มีการตรวจสอบว่าง / ว่างเปล่าทั้งสองแบบ :

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

def doAnotherThing(def member) {
  // Some work
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.