Groovy 简单入门

2016-10-31  本文已影响183人  zhaoyubetter

参考资料:
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();
        }
上一篇下一篇

猜你喜欢

热点阅读