美文网首页
Java & Groovy & Scala & Kotlin -

Java & Groovy & Scala & Kotlin -

作者: bookislife | 来源:发表于2017-06-01 14:03 被阅读0次

    Overview

    本节介绍四种语言的最基本的语法形式,包含注释,操作符,相等性等。

    共通篇

    注释

    四种语言都支持以下三种注释

    //  单行注释
    /*
        多行注释
     */
    /**
     * JavaDoc
     */
    

    Java 篇

    操作符

    Java 中的操作符支持四则运算,赋值(=),运算后赋值(+=),递增递减(++, --),三元操作符(?true:false),逻辑操作符,关系操作符等。

    调用方法

    语法

    方法名(参数列表)
    

    add(1, 2)
    

    相等性

    Java 使用 == 表示基本数据类型的值相等和引用数据类型的地址相等;用方法 equals() 表示引用类型的内容相同。Java 的内置类都实现了自己的 equals() 方法,如果是自己建立的类则要重写 equals() 方法。

    Date x = new Date(100);
    Date y = new Date(100);
    
    System.out.println("x==y: " + (x == y));    //  false
    System.out.println("x.equals(y): " + x.equals(y));  //  true
    

    Groovy 篇

    操作符

    包含 Java 的所有操作符之外,Groovy 还多了一个猫王操作符 ?:,该操作符是三元操作符的语法糖。

    String agentStatus = "Active"
    
    //  三元操作符
    String statusTernary = (agentStatus !=null && !"".equals(agentStatus)) ? "Active" : "Inactive"
    
    //  猫王操作符
    String statusElvis = agentStatus ?: "Inactive"
    

    在使用猫王操作符时 Groovy 会自动将左边的表达式向布尔值进行转换。转换规则为:所有逻辑上的空值都会被认为是 false,比如 null,空字符串,空数组等,除此之外的都是 true

    调用方法

    语法基本同 Java,但是在 Groovy 中如果方法的参数个数只有一个时,可以省略包裹在参数列表上的小括号,方法名和参数间留一个空格

    println("Hello World")
    // 省略小括号
    println "Hello World"
    

    相等性

    Groovy 认为比较内容的使用场合要远远大于比较引用,所以 Groovy 中的 == 默认就是调用 equals() 方法。

    println("x==y: " + (x == y))    //  true
    println("x.equals(y): " + x.equals(y))  //  true
    

    另外 Groovy 在比较时对空指针做了判断,所以等号左边即使是空值也不会引发空指针异常。

    println(null == 10) //  false
    

    如果你希望调用 Java 版本的 == 进行引用的比较,可以调用 is() 方法。

    println("x.is(y): " + x.is(y))  //  false
    

    Scala 篇

    操作符

    Scala 中一切皆对象,所有的操作符都是对应方法的语法糖。即 1 + 2 实际上就是 调用 1.+(2) 的语法糖,其中 + 既是操作符也是方法名。像这种位于两个操作数之间的操作符被称为中缀操作符,Scala 中中缀操作符在使用时可以被省略,所以 1.+(2) 可以简写成 1 + 2

    Scala 支持 Java 中除了递增,递减之外的所有操作符,所以在 Scala 中不能使用 i++ 这样的语句,而需要使用 i += 1 来实现同样的功能。

    调用方法

    同 Groovy,只有一个参数时可以省略括号,在方法名和参数间加一个空格

    相等性

    同 Groovy 一样,== 调用的是 equals() 方法。 不同的是 Groovy 比较引用用的是 is(),而 Scala 则是 eq(),也就是说只是方法名不一致。

    println("x.eq(y): " + x.eq(y)) //  false
    

    Kotlin 篇

    操作符

    基本上同 Groovy,也拥有猫王操作符

    调用方法

    同 Java 一样,很久以前的版本也支持去掉小括号,不过这一特性早已被移除。

    相等性

    和 Groovy,Scala 一样,== 也是调用 equals(),而比较引用使用的是 ===(类似 Javascript),这三种语言同一个功能不同方法名也真是够了。

    println("x===y : " + (x === y)) //  false
    

    Summary

    • 除了 Scala 之外,其它语言都支持一元操作符 ++--
    • Groovy 和 Kotlin 都支持猫王操作符
    • 除了 Java 之外,其它语言中 == 调用的都是 equals(),比较引用则使用其它的方法,且三种语言的方法名都不一致

    文章源码见 https://github.com/SidneyXu/JGSK 仓库的 _08_grammar 小节

    相关文章

      网友评论

          本文标题:Java & Groovy & Scala & Kotlin -

          本文链接:https://www.haomeiwen.com/subject/hhqefxtx.html