美文网首页
Groovy 简单入门

Groovy 简单入门

作者: zhaoyubetter | 来源:发表于2016-10-31 20:57 被阅读183次

    参考资料:
    http://blog.csdn.net/kmyhy/article/details/4200563

    Groovy是什么

    Groovy是一种脚本语言,不同于Java这种系统编程语言,同时脚本相对于系统编程语言,它的目标是不同的,脚本语言用于将应用程序连接起来,实现一些繁琐的,变动频繁的细节,如:copy文件,打包等等,如基于groovy的 gradle构建等;只需要非常少的代码,却实现了相当强大的功能;

    Groovy是基于JVM的一种脚本语言,相对于JVM来说Groovy与Java是一样的;Groovy可使用Java中的各种API;

    开发环境搭建
    使用的开发工具是Android Studio,我使用的版本是2.2的,因Studio是集成有groovy的;我们建立一个Android项目后,然后建立一个 java lib 的module,并添加groovy的依赖:

    Paste_Image.png

    建议 .groovy文件,
    就可以编写groovy小例子了;
    注意::建议groovy文件,是新建文件选择,再输入后缀的,比如:创立A.groovy文件,先选择new File
    再 输入 A.groovy

    注意:经过测试,发现这种方式使用groovy有问题,建议直接使用 java 工程来学习groovy,先配置好groovy环境,groovy环境配置比较简单;

    基础语法

    在Groovy中,调用函数不需要 加 括号,如下面的 println 方法;但建议调用自己的方法时,加上括号,如果不加括号,groovy认为是在调用某个属性;

     // 没有类型
            def var = "Hello World";     // def 用来声明变量
            println var;
            println var.class
    
            // tab 都打印了,原样暑促
            def var2 = """
                Hello Better,
                Good Luck!
            """
            println(var2);
    
            // 不关心对象类型
            var = 1024;
            println var;
            println var.class;     // Integer.class
    
            // 简单循环,范围
            for (i in 0..5) {
                print(var + "\t");
            }
            println();
    
            // Map
            def map = ['name': 'better', 'age': 29, 'sex': 'man'];
            println(map);
            // 添加项
            map = map + ['weight': 55];
            map.put('height', 165); // 注意,这里是小括号
            map.father = 'Better.Father'    // 这个也行
            // 检索
            println(map['father']);     // 通过key作为下标
            println(map.height);        // 通过key作为成员名变量
    

    返回值

    groovy中的变量定义可以不要类型,同样的返回值也不需要类型,groovy函数块,最后一个就是其返回值;

       @Test
        void testFunc() {
            println(groovyFunc(1,2))        // 输出 1 2
        }
    
        def groovyFunc(arg1, arg2) {
            println arg1
            println arg2
            arg1 + " " + arg2    // 最后一行是返回值
        }
    
    

    对字符串的处理

    1. 单引号,类似于Java中的String,不会对$进行处理,即就是字符串;
      def h = 'Hello $ better' // 输出的 Hello $ better
    2. 双引号,如果字符串中有$符号,会对$表达式进行先求值,没有则跟单引号类似;
      def i = 128;
      def str = 'Hello $i' // 输出的是 Hello 128
    3. 三引号,‘’‘XXX’‘’,就字符串进行换行输出;

    闭包##

    闭包用{}括起来的代码块,闭包是一种Groovy中的一种数据类型,它表示的是一段可执行的代码;
    闭包的定义与使用如下:

           def closure1 = {                      // closure1 表示是闭包类型数据变量
                String param1, String param2 ->   // -> 表示闭包定义的参数,箭头后面是代码
                println param1 + " " + param2     // 闭包代码
                return param1                     // 最后一样是返回值,也可以不用return
            }
    
            // 闭包的调用方式1(类似java方法调用)
            println closure1('hello', 'world')
            // 闭包调用方式2,使用专用的call方法
            println closure1.call('hello',  'world')
    

    闭包定义的格式如下:

    def closureName = {param -> code } 或者
    def closureName = {无参数,纯code}   // 没有 ->
    

    grooy使用闭包来迭代:

            // 闭包 (作为参数传递给map的each方法)
            map.each { key, value -> println "$key:$value" };
            map.each({ println it });   // it 为关键字,代表map集合中的每一项
            map.each({ println it.key + "--->" + it.value });
    
            // 闭包单独定义
            def say = {
                word -> println "Hi,$word welcome to grooy world!";
            };
            // 调用
            say("Better");
            say.call('Chelsea & Better');
    

    输出:

    Paste_Image.png

    闭包使用注意点####

    1. 省略圆括号
    def list = [1,2,3,4]
    // each 是个方法,但是这里却没有圆括号;
    // 因为,在Groovy中,如果最后一个参数是闭包,可以省略圆括号;
    list.each{
          println it
    }
    
    1. 确定闭包的参数,这个需要查阅api文档;
      http://tool.oschina.net/apidocs/apidoc?api=groovy

    动态性##

    Groovy所有的对象都有一个元类,metaClass,通过metaClass属性,访问该元素;通过元类,可以为对象添加方法;

            def msg = "Everything For Better Life!";
            println msg.metaClass;      // 元类
    
            String.metaClass.up = { delegate.toUpperCase() };
            String.metaClass.lower = { delegate.toLowerCase() };
    
            println(msg.up());
            println(msg.lower());
    
            // 通过元类,可以检索对象所拥有的方法和属性(类似反射)
            msg.metaClass.methods.each({ println it.name });
            println("------------------");
            msg.metaClass.properties.each( {println it.name });
    
            // 判断是否有某个方法
            if(msg.metaClass.respondsTo(msg, 'up')) {
                println msg.toUpperCase()
            }
            // 判断是否有某个属性
            if(msg.metaClass.hasProperty(msg, "bytes")) {
                println msg.bytes.encodeBase64();
            }
    

    相关文章

      网友评论

          本文标题:Groovy 简单入门

          本文链接:https://www.haomeiwen.com/subject/dopputtx.html