如何 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 空检查?的主要内容,如果未能解决你的问题,请参考以下文章