我是靠谱客的博主 动听棒棒糖,这篇文章主要介绍Groovy脚本的认识和语法简介:数据类型绑定:基本语法:,现在分享给大家,希望可以做个参考。

转:(https://www.jianshu.com/p/e8dec95c4326)

简介:

Groovy是 Apache 旗下的一门基于 JVM 平台的动态/敏捷编程语言,在语言的设计上它吸纳了 Python、Ruby 和 Smalltalk 语言的优秀特性,语法非常简练和优美,开发效率也非常高(编程语言的开发效率和性能是相互矛盾的,越高级的编程语言性能越差,因为意味着更多底层的封装,不过开发效率会更高,需结合使用场景做取舍)。并且,Groovy 可以与 Java 语言无缝对接,在写 Groovy 的时候如果忘记了语法可以直接按Java的语法继续写,也可以在 Java 中调用 Groovy 脚本,都可以很好的工作,这有效的降低了 Java 开发者学习 Groovy 的成本。Groovy 也并不会替代 Java,而是相辅相成、互补的关系,具体使用哪门语言这取决于要解决的问题和使用的场景。

数据类型绑定:

在 Groovy 中,调用的方法将在运行时被选择。这种机制被称为运行时分派或多重方法(multi-methods),是根据运行时实参(argument)的类型来选择方法。Java 采用的是相反的策略:编译时根据声明的类型来选择方法。

下面是一个例子,同样的 Java 代码在 Java 和 Groovy 环境中运行结果是不同的.

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
int method(String arg) { return 1; } int method(Object arg) { return 2; } Object o = "Object"; int result = method(o); // In Java assertEquals(2, result); // In Groovy assertEquals(1, result);

产生差异的原因在于,Java 使用静态数据类型,o 被声明为 Object 对象,而 Groovy 会在运行时实际调用方法时进行选择。因为调用的是 String 类型的对象,所以自然调用 String 版本的方法。

基本语法:

Groovy 定义变量的方式和 Java 是类似的,区别在于 Groovy 提供了def关键字供使用,它可以省略变量类型的定义,根据变量的值进行类型推导。

复制代码
1
2
3
4
5
6
def a = 123 def b = 'b' def c = true boolean d = false int e = 123

如果定义变量的字面量值为数字时,类型会根据数字的大小自动调整

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def a = 1 assert a instanceof Integer // Integer.MAX_VALUE def b = 2147483647 assert b instanceof Integer // Integer.MAX_VALUE + 1 def c = 2147483648 assert c instanceof Long // Long.MAX_VALUE def d = 9223372036854775807 assert d instanceof Long // Long.MAX_VALUE + 1 def e = 9223372036854775808 assert e instanceof BigInteger

对于浮点型字面量为了精度 Groovy 默认使用的类型为 BigDecimal

复制代码
1
2
3
def decimal = 123.456 println decimal.getClass() // class java.math.BigDecimal

Groovy为 数字类型提供一种更简单的声明类型的方式:类型后缀

复制代码
1
2
3
4
5
6
7
- Integer 使用I或i - Long 使用L或l - BigInteger 使用G或g - BigDecimal 使用G或g - Double 使用D或d - Float 使用F或f

使用例子

复制代码
1
2
3
4
5
def a = 123I assert a instanceof Integer def b= 123L assert b instanceof Long

字符串

在Groovy种有两种字符串类型,普通字符串(java.lang.String)和插值字符串(groovy.lang.GString)。
普通字符串使用单引号

复制代码
1
2
println 'hello'

插值字符串使用双引号

复制代码
1
2
3
def name = '张三' println "hello $name"

除此之外,还支持三单引号的写法,可以保留文本的换行及缩进格式

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
def strippedFirstNewline = '''line one line two line three ''' println strippedFirstNewline // 可以写成下面这种形式,可读性更好 def strippedFirstNewline2 = ''' line one line two line three ''' println strippedFirstNewline2

字符

在 Groovy 中并没有明确的字符字面量表示形式,需要显示的指定,有三种方式

复制代码
1
2
3
4
5
6
7
char c1 = 'A' // 声明类型 assert c1 instanceof Character def c2 = 'B' as char // 用as关键字 assert c2 instanceof Character def c3 = (char) 'C' // 强制类型转换 assert c3 instanceof Character

方法(函数)

Groovy 方法的默认访问修饰符是public,方法的返回类型可以不需要声明,但需添加def关键字。有返回值的方法return可以被省略,默认返回最后一行代码的运行结果,如果使用了return关键字则返回指定的返回值。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
String method1() { return 'hello' } assert method1() == 'hello'; def method2() { return 'hello' } assert method2() == 'hello'; def method3() { 'hello' } assert method3() == 'hello';

Groovy 方法的参数类型可以被省略,默认为Object类型。

复制代码
1
2
3
4
5
6
7
8
def add(int a, int b) { return a + b } //与上面的等价 def add(a, b) { a + b }

Groovy 方法的其他特性与Java一样,比如支持重载、不定长参数(...)等。

Lists

Groovy 定义 List 的方式非常简洁,使用中括号([]),以逗号(,)分隔元素即可。Groovy中的 List 其实就是java.util.List,实现类默认使用的是java.util.ArrayList

复制代码
1
2
3
4
5
def numbers = [1, 2, 3] assert numbers instanceof List assert numbers.class == java.util.ArrayList assert numbers.size() == 3

Arrays

Groovy 定义数组的语法和 List 非常类似,区别在于数组的定义必须指定类型为数组类型,可以直接定义类型或者使用def定义然后通过as关键字来指定其类型。

复制代码
1
2
3
4
5
6
7
8
9
String[] arrStr = ['Ananas', 'Banana', 'Kiwi'] //直接声明类型为数组类型 String[] assert arrStr instanceof String[] assert !(arrStr instanceof List) def numArr = [1, 2, 3] as int[] //痛过as关键字指定类型为数组类型 int[] assert numArr instanceof int[] assert numArr.size() == 3

Maps

Groovy 定义 Map 的方式非常简洁,通过中括号包含key、val的形式,key和value以冒号分隔([key:value])。Groovy中的Map其实就是java.util.Map,实现类默认使用的是java.util.LinkedHashMap

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// key虽然没有加引号,不过Groovy会默认将其转换为字符串 def colors = [red: '#FF0000', green: '#00FF00', blue: '#0000FF'] assert colors['red'] == '#FF0000' // 使用中括号访问 assert colors.green == '#00FF00' // 使用点表达式访问 colors['pink'] = '#FF00FF' // 使用中括号添加元素,相当于Java Map 的 put(key,value)方法 colors.yellow = '#FFFF00'// 使用点表达式添加元素 assert colors.pink == '#FF00FF' assert colors['yellow'] == '#FFFF00' assert colors instanceof java.util.LinkedHashMap // 默认使用LinkedHashMap类型 // Groovy Map的key默认语法不支持变量,这里的key时间上是字符串'keyVal'而不是keyVal变量的值'name' def keyVal = 'name' def persons = [keyVal: 'Guillaume'] assert !persons.containsKey('name') assert persons.containsKey('keyVal') //要使用变量作为key,需要使用括号 def keyVal = 'name' def persons = [(keyVal): 'Guillaume'] assert persons.containsKey('name') assert !persons.containsKey('keyVal')

 

最后

以上就是动听棒棒糖最近收集整理的关于Groovy脚本的认识和语法简介:数据类型绑定:基本语法:的全部内容,更多相关Groovy脚本内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部