初学者的 Groovy 脚本教程
什么是 Groovy 脚本?
Apache Groovy 是为 Java 平台构建的面向对象和 Java 语法兼容的编程语言。这种动态语言具有许多类似于 Python、Ruby、Smalltalk 和 Pero 的特性。 Groovy 源代码被编译成 Java 字节码,因此它可以在任何安装了 JRE 的平台上运行。 Groovy 还在幕后执行了许多任务,使其更加敏捷和动态。
Groovy 语言可以用作 Java 平台的脚本语言。它几乎就像是 Java 的超级版本,提供了 Java 的企业功能。它还提供了许多生产力特性,例如 DSL 支持、闭包和动态类型。与其他一些语言不同,它被设计为伴侣,而不是 Java 的替代品。
为什么选择 Groovy?
以下是您应该使用和学习 Groovy 的主要原因-
- Groovy 是一种敏捷且动态的语言
- 与所有现有 Java 对象和库无缝集成
- 对 Java 开发人员来说感觉轻松自然
- 与 Java 相比,代码更简洁、更有意义
- 您可以随心所欲地使用 Java 应用程序
Groovy 历史
- 2003 年:由 Bob McWhirter 和 James Strachan 开发
- 2004 年:委托 JSR 241 但被放弃
- 2005 年:由 Jeremy Rayner 和 Guillaume Laforge 带回
- 2007:Groovy 1.0 版
- 2012:Groovy 版本 2
- 2014:Groovy 2.3 版(为 JDK 8 提供官方支持)
- 2015 年:Groovy 成为 Apache 软件基金会的一个项目
Groovy 的特点
- 列表、映射、范围、正则表达式字面量
- 多方法和元编程
- Groovy 类和脚本通常存储在 .groovy 文件中
- 脚本包含没有任何类声明的 Groovy 语句。
- 脚本还可以包含类定义之外的方法定义。
- 它可以编译并与传统的 Java 应用程序完全集成。
- 对地图、列表、正则表达式的语言级别支持
- 支持闭包、动态类型、元对象协议
- 支持静态和动态类型和运算符重载
- 列表(数组)、映射、范围和正则表达式的文字声明
如何安装 Groovy
步骤 1) 确保您已安装 Java。 https://www.guru99.com/install-java.html
步骤 2) 转到 http://groovy-lang.org/download.html 并点击安装程序。
注意:您还可以使用 Zip 文件或作为 Eclipse IDE 安装 Groovy。在本 Groovy 教程中,我们将坚持使用 Windows Installer
步骤 3) 启动下载的安装程序。选择语言并点击确定
第 4 步) 发射。在欢迎屏幕中,单击“下一步”
第 5 步) 同意许可条款
第 6 步) 选择要安装的组件,点击下一步
第 7 步) 选择安装目录,点击下一步
第 8 步) 选择开始菜单文件夹并点击下一步
第 9 步) 安装完成后,让路径默认并点击下一步
步骤 10) 点击下一步
步骤 11) 在开始菜单中搜索 Groovy 控制台
Groovy Hello World 示例
假设我们想用 Java 打印一个简单的字符串“Hello World”。实现字符串 Groovy hello world 的代码是
public class Demo { public static void main(String args[]) { System.out.println("Hello World"); } }
上述代码在 Java 和 Groovy 中都有效,因为 Groovy 是 Java 的超集。但 Groovy 的优势在于我们可以省去类创建、公共方法创建等工作,并且只需一行代码即可实现相同的输出,如下所示:
println "Hello World."
不需要分号
不需要括号
System.out.println 简化为 println
Groovy 变量
在 Java 中,静态绑定是强制性的。这意味着必须提前声明变量的类型。
public class Demo { public static void main(String args[]) { int x = 104; System.out.println(x); //x = "Guru99"; } }
在本 Groovy 教程的上述示例中,变量类型(整数)是使用关键字“int”预先声明的。如果要声明浮点数,请使用关键字 float。
如果您尝试将 String 值分配给 int(取消注释第 5 行),您将收到以下错误
Demo.java:5: error: incompatible types: String cannot be converted to int x = "Guru99";
相比之下,Groovy 支持动态类型。变量是使用关键字“def”定义的,变量的类型不需要事先声明。编译器在运行时计算出变量类型,你甚至可以计算出变量类型。
考虑以下 groovy 示例,
def x = 104 println x.getClass() x = "Guru99" println x.getClass()
输出
class java.lang.Integer class java.lang.String
在 Groovy 中,您可以创建多行字符串。只需确保将字符串括在三引号中即可。
def x = """Groovy at Guru99""" println x
输出
Groovy at Guru99
注意 :您仍然可以使用 Groovy 变量类型,如 byte、short、int、long 等。但是你不能像显式声明的那样动态改变变量类型。
考虑以下代码:
int x = 104 println x x = "Guru99"
它给出了以下错误
104 Caught: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'Guru99' with class 'java.lang.String' to class 'int' org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'Guru99' with class 'java.lang.String' to class 'int' at jdoodle.run(jdoodle.groovy:3) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) Command exited with non-zero status 1
Groovy 运算符
运算符是告诉编译器进行某些数学或逻辑操作的符号。
Groovy 有以下五种操作符——
- 算术运算符:加 (+)、减 (-)、乘 (*)、除 (/)
- 关系运算符:等于 (==)、不等于 (!=)、小于 (<) 小于等于 (<=)、大于 (>)、大于等于 (>=)
- 逻辑运算符:And (&&)、Or(||)、Not(!)
- 位运算符:And(&)、Or(|)、(^)、Xor 或异或运算符
- 赋值运算符:否定运算符 (~)
Groovy 循环
在 Java 中,您可以如下定义一个循环
public class Demo { public static void main(String args[]) { for (int x = 0; x <= 5; x++) { System.out.println(x); } } }
输出
0 1 2 3 4
您可以使用最多关键字在 Groovy 中实现相同的输出
0.upto(4) {println "$it"}
你得到与上面相同的输出。 $it 是一个给出当前循环值的闭包。
考虑以下代码
2.upto(4) {println "$it"}
它给出了一个输出
2 3 4
您也可以使用“times”关键字来获得相同的输出
5.times{println "$it"}
考虑一下,您想在 Java 中使用 for 循环打印 0,2,4
public class Demo { public static void main(String args[]) { for (int x = 0; x <= 5; x=x+2) { System.out.println(x); } } }
输出:
0 2 4
也可以使用step方法
0.step(7,2){println "$it"}
Groovy - 决策制定
语句 | 欺骗 |
---|---|
if 语句 | 与Java一样,如果条件为真,则执行if语句。 |
if/else 语句 | 在 if/else 语句中,首先在 if 语句中评估条件。如果条件为真,则执行之后的语句。它在 else 条件之前停止并退出循环。但是,如果条件为假,则执行 else 语句块中的语句。然后退出循环。 |
嵌套 If 语句 | 当需要有多个if语句时使用它。 |
切换语句 | 当您有多个条件时,嵌套的 if-else 语句可能会变得不可读。为了使代码更具可读性,使用了 switch 语句。 |
嵌套切换语句 | 在 Groovy 中也可以使用嵌套的 switch 语句。 |
常规列表
列表结构允许您存储数据项的集合。在 Groovy 编程语言中,List 包含一系列对象引用。它还显示了序列中的位置。 List 字面量表示为一系列用逗号分隔并用方括号括起来的对象。
Grrovy 列表示例:
字符串列表- ['Angular', 'Nodejs,]
对象引用列表 - [‘Groovy’, 2,4 2.6]
整数值列表 - [16, 17, 18, 19]
一个空列表 - [ ]
以下是 Groovy 中可用的列表方法:
方法 | 说明 |
---|---|
add() | 允许您将新值附加到此列表的末尾。 |
包含() | 如果此 List 包含某个值,则返回 true。 |
get() | 返回确定位置的元素 |
isEmpty() | 如果 List 不包含任何元素,则返回真值 |
减号() | 此命令允许您创建一个由原始元素组成的新列表,不包括在集合中指定的元素。 |
加号() | 允许您创建一个由原始元素以及集合中提到的元素组成的新列表。 |
pop() | 从列表中删除最后一项 |
删除() | 移除指定位置的元素 |
reverse() | 创建一个新的 List 来反转原始 List 的元素 |
尺寸() | 返回此列表中的元素个数 |
排序() | 返回一个排序的副本 |
考虑以下 Groovy 脚本示例
def y = ["Guru99", "is", "Best", "for", "Groovy"] println y y.add("Learning") println(y.contains("is")) println(y.get(2)) println(y.pop())
输出
[Guru99, is, Best, for, Groovy] true Best Learning
Groovy 地图
Map Groovy 是键值对的集合
Groovy 映射示例:
- [Tutorial:‘Java, Tutorial:‘Groovy] – 以 Tutorial 作为键和它们各自值的键值对集合
- [ :] 表示一个空地图
这是 Groovy 中可用的映射方法列表。
方法 | 说明 |
---|---|
containsKey() | 检查地图是否包含这个键? |
get() | 这个命令在这个Map中查找key并返回对应的值。如果您在此 Map 中没有找到任何条目,则它将返回 null。 |
keySet() | 允许在此 Map 中找到一组键 |
put() | 将指定的值与此 Map 中的给定键相关联。如果之前的 Map 包含此键的映射。然后旧值将被指定值替换。 |
尺寸() | 返回键值映射的数量。 |
值() | 此命令返回值的集合视图。 |
Groovy 示例:
def y = [fName:'Jen', lName:'Cruise', sex:'F'] print y.get("fName")
输出
Jen
Groovy- 闭包
groovy 闭包是一段包装为对象的代码。它充当方法或函数。
简单闭包示例
def myClosure = { println "My First Closure" } myClosure()
输出:
My First Closure
闭包可以接受参数。标识列表用逗号分隔
一个箭头 (->) 标记参数列表的结尾。
def myClosure = { a,b,c-> y = a+b+c println y } myClosure(1,2,3)
输出
6
闭包可以返回一个值。
def myClosure = { a,b,c-> return (a+b+c) } println(myClosure(1,2,3))
输出
6
有很多内置的闭包,如“It”、“identity”等。闭包可以将其他闭包作为参数。
Groovy 对比爪哇
Groovy | Java |
---|---|
在 Groovy 中,默认访问说明符是公共的。这意味着没有任何指定访问修饰符的方法是公共的,并且可以在类和包边界之外访问。 | 在Java中,默认的访问修饰符是一个包,也就是说,如果你不为字段、方法或类指定访问修饰符,它就会变成包私有的, |
为类成员自动生成getter和setter。 | Java,需要为字段定义getter和setter方法 |
Groovy 允许使用带字符串的双引号进行变量替换。 | Java 不支持变量替换。 |
输入信息是可选的。 | 在 Java 中键入信息是强制性的。 |
Groovy 不需要以分号结尾。 | 在 Java 中,每条语句都以分号结尾。 |
Groovy 自动为每个程序提供一个名为 Script 的包装类 | 在 Java 中,您需要 main 方法来使类可执行。 |
关于 Groovy 的神话
神话 | 现实 |
---|---|
我们可以使用 Groovy 来编写脚本。 | 它可以用于脚本。但是,除此之外,您还可以执行许多其他任务。 |
Groovy 是关于闭包的。 “它只是函数式编程语言。” | Groovy 采用了 Lisp 或 Closure 等函数式编程语言。 |
如果你想做 TDD,Groovy 是一个理想的选择 | 这个说法是正确的。但是,这肯定不是使用 Groovy 的唯一原因。 |
只有在你想使用 Grails 时才能使用 Groovy。 | Grails 是一个强大的Web 开发框架。
但 Groovy 提供的远不止这些。 |
使用 Groovy 的缺点
- JVM 和 Groovy 脚本启动时间很慢,这限制了操作系统级别的脚本编写
- Groovy 并未被其他社区完全接受。
- 不使用 IDE 使用 Groovy 很不方便
- Groovy 可能会变慢,从而增加了开发时间
- Groovy 可能需要大量内存
- Java 知识势在必行。
Groovy 工具
我们将在本 Groovy 脚本教程中讨论 3 个重要工具
1. groovysh:交互执行代码。
2. groovyConsole:交互式代码执行的GUI
3.groovy:执行groovy脚本。你可以像 Perl、Python 等一样使用它。
Groovysh
- 命令行外壳
- 帮助您以交互方式执行 Groovy 代码
- 允许输入语句或整个脚本
Groovy 控制台
- Swing 界面,充当最小的 Groovy 开发编辑器。
- 允许您与 Groovy 代码交互
- 帮助您加载和运行 Groovy 脚本文件
时髦
它是执行 Groovy 程序和脚本的处理器。你
可以用来测试简单的 Groovy 表达式。
总结
- Groovy 是一种用于 Java 平台的面向对象的编程语言
- Groovy 脚本提供与所有现有 Java 对象和库的无缝集成
- Bob McWhirter 和 James Strachan 在 2003 年开发了 groovy
- 列表、映射、范围、正则表达式字面量是 Groovy 的重要特性
- Groovy 支持四种类型的运算符:1. 关系型 2. 逻辑型 3. 位型 4. 赋值
- Groovy 使用 if、if/else、嵌套 if、switch、Netsted switch 语句执行决策
- 列表结构允许您存储数据项的集合
- Map Groovy 是键值对的集合
- 在 Groovy 中,为类成员自动生成 Getter 和 setter
- 在 Java 中,您可以使用为字段提供 getter 和 setter 方法
- 关于 Groovy 的最大误区是它只能用于不正确的脚本编写
- 有时 Groovy 可能会变慢,从而增加了开发时间
- 三个 Groovy 工具是:执行代码的 groovysh、用于交互式代码执行的 GUI 的 groovy Console 和执行脚本的 groovy
java