null子句

时间:2016-08-17 13:00:30

标签: grails

嗨我有以下功能:

   def signup(String name){

        def x =Human.where{name == name}
        if(x != null)
        {

            def myhuman=new Human(name: name)
            if(myhuman.save() && myhuman.validate())
            {
                redirect(url:"https//localhost:8080")
            }
        }
        else
        {
            return
        }
    }

工作正常。我可以创建具有不同名称的人,但我无法创建具有相同名称的人,但是我想知道为什么我们为什么要检查x!=null,我们不应该检查x == null因为我们首先看看这样的人是否存在,如果我们不创造它。我试过x==null,我不能创造人类,有人可以解释吗?

2 个答案:

答案 0 :(得分:0)

您检查x != null,因为您现在可以对null对象执行操作吗?事实上,执行以下操作更具Groovy:

if (!x) {
    // Logic
}

这是因为Groovy Truth

如果x == null验证true,那么您可以正常执行您需要的任何操作。但是,由于在您的情况下x不是nullx == null将验证为false并跳过if块。这不是特定于Grails的,它是一般编程。

答案 1 :(得分:0)

您可以使用Elvis操作符,如果该用户不存在,则创建一个新操作符。

当一个人存在时,它有一个id,所以你检查是否有一个id,如果没有,你保存它并进行重定向。

您不需要验证对象,save方法在保存之前验证对象,如果未验证,则返回false。

Human human = Human.findByName(name)?: new Human(name: name)
if(!human.id && human.save()){
   redirect(url:"https//localhost:8080")
}else{
   return
}