Syntax 如何用Groovy实现空检查?

Syntax 如何用Groovy实现空检查?,syntax,groovy,null-check,Syntax,Groovy,Null Check,有没有更“Groovy”的方式来编写此Groovy代码: def myVar=(System.getProperty("props") == null)? null : System.getProperty("props") 逻辑是: 如果System.getProperty(“props”)为空,我希望props为空 否则,我希望props成为System.getProperty(“props”)的值 通常用于空值检查,我使用?:(如果左侧为空,则elvis运算符返回默认值或解析为

有没有更“Groovy”的方式来编写此Groovy代码:

def myVar=(System.getProperty("props") == null)?
    null : System.getProperty("props")
逻辑是:

  • 如果
    System.getProperty(“props”)
    为空,我希望
    props
    为空
  • 否则,我希望
    props
    成为
    System.getProperty(“props”)的值

通常用于空值检查,我使用
?:
(如果左侧为空,则elvis运算符返回默认值或解析为false)或
?。
(安全导航,如果左侧为空,则计算为空)。如果要设置属性不存在时使用的默认值,可以执行以下操作:

def myVar = System.properties['props'] ?: 'mydefaultvalue'
如果在键“props”的System.properties中找不到任何内容(或者如果返回的值解析为false),则将myVar设置为“mydefaultvalue”。但是由于您的案例中的默认值是null

def myVar = System.properties['props']
也可以执行此任务,因为当给定密钥没有找到任何内容时,将返回null

这里的Groovy定义是:

  • 如果不需要GroovyString插值,则更喜欢单引号字符串而不是双引号字符串

  • 对映射和列表使用带括号的索引语法(而不是“get”或“put”)

  • 如果getter没有参数,则使用(不带
    get
    前缀)(与Java不同,Groovy实现了)
    System.getProperty(String)
    对Java程序员来说是一种方便,但在Groovy中是不需要的

  • 如果为空,则使用

在Ruby和JavaScript中使用
| |
可以找到这个习惯用法:

def myVar = System.properties['props'] || 'mydefaultvalue'

在Groovy中不起作用。布尔测试的结果是一个布尔值,因此myVar被设置为true。

停下来,喝杯咖啡,重新思考你在问题中的陈述。:)这绝对是一个好主意:)我不知道为什么会被否决。它以前从未被问过,也不容易研究,而且是一个编程/代码问题。至于咖啡@dmahapatro,那根本没用。我有和以前一样的问题…我没有投反对票,但我认为你的要求完全不清楚。如果Pawel的答案不是你想要的,那么我不知道你在找什么。谢谢@NathanHughes,但Pawel的答案是“这绝对是个好主意:)”。他指的是德马哈帕特罗建议我喝杯咖啡,但这不是答案。至于我在问什么,我在问,对于我目前编写代码的方式,是否有语法上的Groovy快捷方式。例如,Groovy允许您删除语句末尾的分号,等等。我想知道我是否可以在这里做些什么来“缩小”我的代码并使其更“Groovy”。或者
def myVar=System.properties['props']| mydefaultvalue'
@castus:这似乎是Ruby iirc中一个熟悉的习惯用法,我希望它在这里也能起作用。但在groovy中,您的行会导致myVar被设置为布尔值true。在build.gradle文件中,您可以使用它来获取带有默认值的gradle属性:
findProperty('foo')?:“bar”
findProperty()
方法属于Project()——可以直接从脚本与之交互的顶级对象。