groovy






loess平滑计算公式_大数据 追溯到1984年。苹果发布Macintosh ,“ 最终战役 ”即将在V展开,苏格兰赢得五国大赛,并在比赛中大满贯。 就在英国矿工罢工期间,英国流行乐团Sade发布了吸引人的号码: Smooth Operator 。 它在英国和美国都取得了排行榜的成功(更不用说德国,荷兰和奥地利的排行榜了)。 Sade几乎不知道,几十年后,Groovy编程语言将具有几个平滑的运算符 ,这些运算符超出了Java运算符的标准集。 现在,我们将保留1980年的比较,并在此博客文章中讨论Groovy中的一些平滑运算符。

猫王

loess平滑计算公式_编程语言_02 猫王算子(以某人的发型命名)是三元算子的缩写。 空检查非常方便。 而且请记住,尽管可以说空处理是不好的编码习惯,因为最好不要在代码中包含空值,但是代码库中的许多API都不可避免地会返回空值,而在现实世界中,您想要添加一些健壮性和防御性编码可以使事情在生产中保持平稳,这种事情很有用。

请记住,在Groovy中有几件事,例如null,例如可以强制转换为false的空String)

String country = country.name ?: "Unknown country"

country.name为null或只是“由于Groovy中两个都为false,则将country分配为Unknown country”。 如果country.name不为false,则只会为country分配该值。

空安全解除引用(也称为安全导航运算符)

这对于避免链接表达式中的空指针异常特别有用。 例如,

String location = map.getLocation().getXandYCoordinates();

可能会产生空指针异常。 但是,如果地图或map.getLocation()的结果为null,则使用安全导航运算符

String location = map?.getLocation()?.getXandYCoordinates();

location只会设置为null。 因此,不会引发空指针异常。

传播

在集合的元素上执行方法并收集结果时,Spread运算符很有用。 在此示例中,我将一堆字符串解析为数组,然后对每个数组运行闭包以获取所有第一个元素。

def names = ["john magoo","peter murphy"]
def namesAsArrays = names*.split(" ")
namesAsArrays.each(){print it[0]}

现在,记住Spread运算符只能在方法和元素上使用。 例如,它无法执行关闭。 但是我们可以做的是利用Groovy的元编程功能来创建方法,然后使用散布运算符来调用该方法。 假设我们有一个数字列表,我们也想加50,然后将答案乘以6,我们可以这样做:

def numbers = [43,4]
java.lang.Integer.metaClass.remixIt = {(delegate + 50) * 6}
numbers*.remixIt()

飞船操作员

loess平滑计算公式_python_03 它起源于Perl编程语言,之所以这么称呼是因为您猜对了,<=>看起来像是一艘太空飞船! 那么它是怎样工作的? 好吧,就是这样。 太空船算子左右两边的表达式都被求值。 如果左侧的操作数较小则返回-1,如果左侧和右侧相等则返回0,如果左侧较大则返回1。 举个例子,它的力量应该变得更加明显。

假设我们有一堂课来代表软件工程师。

class SoftwareEngineer {
    String name
    int age
    String toString() { "($name,$age)" }
}

def engineers = [
    new SoftwareEngineer(name: "Martin Fowler", age: 50),
    new SoftwareEngineer(name: "Roy Fielding", age: 48),
    new SoftwareEngineer(name: "James Gosling", age: 58)
]

现在我们可以轻松地按年龄排序

engineers.sort{it.age}

但是,当我们的工程师名单越来越多并且我们有多名同龄工程师时,该怎么办? 在这些情况下,最好先按年龄排序,然后再命名。 我们可以这样做:

engineers.sort{a, b -> 
   a.age <=> b.age ?: a.name <=> b.name

此表达式将尝试按年龄先排序工程师。 如果他们的年龄相等,则a.age <=> b.age将返回0。在Groovy和Elvis构造中,0表示false,因此a.name <=> b.name将被评估并用于确定分类。

现场访问

在Groovy中,当尝试进行字段访问时,Groovy将调用相应的accessor方法。 字段访问运算符是一种强制Groovy使用字段访问的机制。

class RugbyPlayer {
     String name
     String getName() {name ?: "No name"} 
}

assert "Tony" == new RugbyPlayer(name: "Tony").name
assert "No name" == new RugbyPlayer().name
assert null == new RugbyPlayer().@name

方法参考

使用“方法引用”运算符,您可以将对方法的引用视为闭包。

class MyClass {
   void myMethod() { println "1" }
   void myMethod(String s) { println "2" }
}

def methodRef = new MyClass().&"myMethod"
methodRef()    // outputs 1
methodRef('x') // outputs 2

。&创建org.codehaus.groovy.runtime.MethodClosure的实例。 可以将其分配给变量,然后如图所示进行调用。

祝大家新年快乐,并希望在2014年发布更多博客。