Java & Groovy & Scala & Kotlin - 08.基本语法

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 - 08.基本语法)