ฉันต้องทำการตรวจสอบค่าว่าง / ค่าว่างในบางรหัสก่อนที่จะใช้ตรรกะบางอย่าง ฉันมีรายการด้านล่างเพราะฉันรู้สึกว่า!members?.empty
ไม่ถูกต้อง
มีวิธีที่ง่ายกว่าในการเขียนต่อไปนี้หรือไม่?
if (members && !members.empty) {
// Some Work
}
ฉันต้องทำการตรวจสอบค่าว่าง / ค่าว่างในบางรหัสก่อนที่จะใช้ตรรกะบางอย่าง ฉันมีรายการด้านล่างเพราะฉันรู้สึกว่า!members?.empty
ไม่ถูกต้อง
มีวิธีที่ง่ายกว่าในการเขียนต่อไปนี้หรือไม่?
if (members && !members.empty) {
// Some Work
}
คำตอบ:
มีทาง Groovier แน่นอน
if(members){
//Some work
}
ทำทุกอย่างถ้าmembers
เป็นคอลเลกชัน การตรวจสอบค่าว่างและการตรวจสอบที่ว่างเปล่า (คอลเลกชันที่ว่างเปล่าจะถูกบังคับให้false
) ลูกเห็บGroovy ความจริง :)
members?.age.max()
ระเบิดด้วย "Cannot invoke method max () on null object" เมื่อสมาชิกเป็น null คุณจะต้องmembers?.age?.max()
List members = null;
และList members = [ [age: 12], [age: 24], [age: null], null ]
เทียบกับโซลูชันทั้งสอง
!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()
FYI รหัสประเภทนี้ใช้งานได้ (คุณสามารถพบว่ามันน่าเกลียดมันเป็นสิทธิ์ของคุณ :)):
def list = null
list.each { println it }
soSomething()
กล่าวอีกนัยหนึ่งรหัสนี้มีการตรวจสอบว่าง / ว่างเปล่าทั้งสองแบบ :
if (members && !members.empty) {
members.each { doAnotherThing it }
}
def doAnotherThing(def member) {
// Some work
}