如何 Groovy-ify 空检查?

Posted

技术标签:

【中文标题】如何 Groovy-ify 空检查?【英文标题】:How to Groovy-ify a null check? 【发布时间】:2014-09-22 05:44:45 【问题描述】:

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

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

逻辑是:

如果System.getProperty("props") 为NULL,我希望props 为NULL; 否则,我希望props 成为System.getProperty("props") 的值

【问题讨论】:

停下来,喝杯咖啡,重新思考一下你在问题中的陈述。 :) 这绝对是个好主意:) 不知道为什么这被否决了。它以前没有被问过,不能很容易地研究,并且是一个编程/代码问题。至于咖啡@dmahapatro,那根本没有帮助。我和以前有同样的问题...... 我没有投反对票,但我认为您的要求完全不清楚。如果 Pawel 的答案不是您想要的,那么我不知道您在寻找什么。 感谢@NathanHughes,但 Pawel 的回答是“这绝对是个好主意 :)”。他指的是 dmahapatro 建议我喝杯咖啡,而不是答案。至于我在问什么,我问的是我目前编写代码的方式是否有句法 Groovy 快捷方式。例如,Groovy 允许您删除语句末尾的分号等。我想知道是否可以在这里“缩小”我的代码并使其更“Groovy”。 【参考方案1】:

对于空值检查,我通常使用?:(elvis 运算符,如果左侧为 null 或解析为 false,则返回默认值)或 ?.(安全导航,如果左侧则计算为 null边为空)。如果您想设置一个在属性不存在时使用的默认值,您可以这样做:

def myVar = System.properties['props'] ?: 'mydefaultvalue'

如果在 System.properties 中没有找到键“props”的任何内容(或者如果返回的值解析为 false),则将 myVar 设置为“mydefaultvalue”。但是由于您的情况下的默认值为 null 那么

def myVar = System.properties['props']

也可以完成这项工作,因为如果没有找到给定键的任何内容,则返回 null。

这里的 Groovy-ifications 是:

如果您不需要 GroovyString 插值,则首选单引号字符串而不是双引号字符串

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

如果 getter 没有参数,则使用 shortened property form(不带 get 前缀)(与 Java 不同,Groovy 实现了 universal access principle); System.getProperty(String) 对 Java 程序员来说是一种便利,但在 Groovy 中却不需要

使用 ?: 缩短 default-if-null 案例

这个成语在 javascript 中使用 || 找到:

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

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

【讨论】:

def myVar = System.properties['props'] || 'mydefaultvalue' @castus:这在 Ruby iirc 中似乎是一个熟悉的习语,我希望这也能在这里工作。但在常规中,您的行会导致 myVar 被设置为布尔值 true。 在 build.gradle 文件中,您可以使用它来获取带有默认值的 Gradle 属性:findProperty('foo') ?: 'bar' findProperty() 方法属于 Project (docs.gradle.org/current/javadoc/org/gradle/api/Project.html) - 您可以使用的***对象直接从你的脚本接口。

以上是关于如何 Groovy-ify 空检查?的主要内容,如果未能解决你的问题,请参考以下文章

解析xml时如何检查空标签?

如何检查空切片?

预期 [ ] 为 [ ] Jasmine,如何检查空数组

如何避免嵌套的空检查[重复]

如何检查数组是不是为空/空?

如何检查游标中的空结果? (烧瓶+ pymysql)