zoukankan      html  css  js  c++  java
  • Groovy入门常用语法

    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 !

  • 相关阅读:
    MD53D模型
    WPF 关于变换
    WPF 关于圆角的制作
    [转载]MVVM、MVVMLight、MVVMLight Toolkit之我见
    Surface Pro 调整空间大小
    WPF 图片浏览 伪3D效果
    WPF 实现视频循环播放
    WPF MediElement 视频播放
    WPF INotifyPropertyChanged
    Matlab摄像头视频基本处理
  • 原文地址:https://www.cnblogs.com/FunTester/p/15379668.html
Copyright © 2011-2022 走看看