写点什么

Groovy 入门常用语法

用户头像
FunTester
关注
发布于: 刚刚

Groovy 自 2003 年起出现在 Java 领域。凭借十多年的历史、发展和经验,它是一种 Java 语法兼容的面向对象编程语言,可编译为 JVM 字节码。在某种程度上,Groovy 可以被视为 Java 的一种脚本化改良版。这是因为它运行在虽然运行在 JVM 上,由于它的工作方式,它可以很好地与 Java 代码及其相关库进行互操作。大多数有效的 Java 代码也可以转换为有效的 Groovy 代码。


Groovy 被设计为既是编程语言又是脚本语言。这意味着与需要编译的 Java 不同,Groovy 可以结合各类语法糖的使用,减少了编码过程中大量工作。


Groovy 和 Java 代码的最大区别在于 Groovy 更灵活,语法要求更少,因此吸引了许多 Java 使用者。这意味着许多进入 Groovy 的 Java 开发人员会发现学习它的过程非常简单。因为从根本上说,大多数基于面向对象的编程语言都倾向于遵循相同的语法。这种共享的意识形态使开发人员可以轻松地在 Java 和 Groovy 之间切换,或者可以混用 Java 和 Groovy。


这篇文章将介绍使用 Groovy 编码过程中最初遇到的几种情况,借以体现 Groovy 的特性和优势。

Groovy 环境

用户可以通过包管理器安装 Groovy。或者可以从他们的网站安装 Groovy,这一点跟 Java 一样,当然前提是需要 Java SDK 作为基础。


Groovy 文件以.groovy扩展名保存。


可以直接在命令行中执行文件,例如:


groovy index.groovy


要运行 Groovy Shell,直接在命令行中输入groovysh

list 和 map

list 通常也称为数组。它按顺序存储对象,可以通过整数索引访问。在 Groovy 中,列表如下所示:


    def shoppingList = ["flour", "eggs", "banana", "bread"]    println shopingList[2]    shoppingList.remove("flour")        shoppingList.add("milk")    println shoppingList[2]
复制代码


这些都是最基础的,基本跟 Java list 语法习惯是一致的。Groovy 特性语法参考:Groovy中的list


map 包含基于键对值的列表,与 Java 无异。


    def productDetails = [      "name": "FunTester",      "type": "tester",      "age": 5,      "color": "bule"     ]     println productDetails["name"];     productDetails["age"] = 5.99
复制代码


我们还可以将列表添加到地图中,如下所示:


    def toDoList = [      "monday": ["water plants", "laundry"],      "tuesday": ["assignment due", "feed cat"]     ]     toDoList['wednesday'] = ["clean kitchen", "get groceries"]     println toDoList['wenesday'][1]
复制代码


当然我们甚至可以直接使用toDoList.monday来访问 value 值。

条件语句

最基本的条件是 if else 语句。结果是一个布尔值,用于确定接下来要执行的代码块。Groovy 中的 if else 语句如下所示:



def myString = "I am FunTester." if(myString.contains("FunTester")){ println myString } else { println "NO!" }
复制代码


这里 Groovy 可以省略方法后面的括号。


此外还可以在 if 语句中执行计算结果为布尔值的表达式。&&和||运算符是称为“and”和“or”的条件,这一点跟 Java 完全一致。


您可以用来为 if else 语句选项提供超出这两个选项的另一个条件是使用 else if 选项。

循环

循环是我们希望在某些情况下重复的一组代码。常见类型的循环是:while、each。


让我们从三个中的第一个开始:while 循环。while 在 Groovy 中编写循环如下所示:


     def counter = 0;     while(counter < 10){        counter = counter ++     }     println "FunTester!"
复制代码


each 是当你处理一个列表时,迭代它直到列表用完。each 功能与 Java 的 foreach 功能类似,但是更强大。下面是使用 each 遍历 list 示范:


    def children = ["James", "Albus", "Lily"];     println "The children's names are:"     children.each { child ->        println child     }
复制代码


当然还可以像这样遍历 map:


    def families = [      "Potter": ["James", "Albus", "Lily"],      "Weasley": ["Rose", "Hugo"],      "Lupin": ["Edward"]     ]     families.each{ family, child ->      println "The children of the " + family + " family are " + children.join(', ')     }
复制代码

JSON

不同于 Java,Groovy 自带了JsonBuilder来处理 JSON 对象,这个平时极少用,但是在 JMeter API 使用中会经常用到。主要因为 JMeter 支持原生的 Groovy 脚本,使用JsonBuilder免去了引入第三方 JSON 包的步骤。


Groovy 包括用于写入 JSON 的简单类。所要做的就是 JsonBuilder 在要转换的列表地图上导入和使用。


    import groovy.json.JsonBuilder     def families = [      "Potter": ["James", "Albus", "Lily"],      "Weasley": ["Rose", "Hugo"],      "Lupin": ["Edward"]     ]     new File('familyMembers.json') << new JsonBuilder(families).toPrettyString()
复制代码


newFile()将创建一个新的文件对象,我们将转换后的 families JSON 信息传递给它,这里<<又是 Groovy 特性中有趣的地方,有兴趣的可以直接点开源码即可。此外 Groovy 还支持众多操作符的重新,参考Groovy重载操作符(终极版)


JSON 是在不同应用程序和网络之间移动结构化数据的最流行方法。让我们假设我们得到一个包含所有库存信息的巨大列表的 JSON 文件。


    import groovy.json.\*     def inventoryListFile = new File('products.json')     def inventory = new JsonSlurper().parseText(inventoryListFile.text)     println inventory['banana']
复制代码


使用 JsonSlurper 创建一个新的实例和调用 parseText 方法来读取 JSON 文本信息到一个 JSON 对象中。

HTTP

此处使用的场景同上,可以在 JMeter API 场景中发挥巨大的作用,可以在只有 Java SDK 和 Groovy SDK 的机器上实现 HTTP 请求的脚本。写法上比较灵活,下面的例子使用了闭包解析了响应结果,实际使用中并不建议这么做。因为不管是在 JMeter 中还是 Linux 服务器上,都缺乏本机 IDE 提供的各类检查功能,脚本的可读性相比编码效率具有更高的优先级。


     import groovyx.net.http.HTTPBuilder     import groovy.json.JsonBuilder     new HTTPBuilder('http://localhost:12345/te3st').get(           'query': [             'action': 'FunTester',             'search': 'funs'          ]     ) { resp, json ->           if(resp.status == 200) {                 def responseFile = new File('potter.json')                 responseFile.text =  new JsonBuilder(json).toPrettyString()          } else {               println '响应错误&resp.status'          }     }
复制代码

last

Groovy 是一门弥补了 Java 部分遗憾的语言,如果你是一个 Javaer,那么几乎可以秒变 Groovyer,因为绝大部分语法都是兼容的。在实际工作中 Groovy 可以让 Java 如虎添翼,原地起飞。

Have Fun ~ Tester !

发布于: 刚刚阅读数: 2
用户头像

FunTester

关注

公众号:FunTester,650+原创,欢迎关注 2020.10.20 加入

Have Fun,Tester! 公众号FunTester,坚持原创文章的测试人。 FunTester测试框架作者,DCS_FunTester分布式性能测试框架作者。

评论

发布
暂无评论
Groovy入门常用语法