欢迎光临
专注android技术,聚焦行业精粹,我们一直在努力

Android Gradle 之Groovy基础介绍

大多数Android开发者精通java语言,对比groovy和java的不同的使用的方式是非常有趣的。如果你是java程序员,Groovy是非常容易阅读的,但是自己写一个Groovy代码在没有也简单的介绍的前提下会是一件困难的事情。

一个非常好的Groovy实践是使用Groovy Console工具。这个工具和Groovy SDK是一起发布的,可以非常简单的试验Groovy语法,并能快速获得一个运行结果。这个Groovy Console工具也可以处理纯Java代码,这样可以让你更简单的比对Java和Groovy代码。你可以下载Groovy SDK,它会包含Groovy Console,下载地址:http://groovy-lang.org/download.html#osinstall

工具截图如下:

1.1、Groovy介绍

Groovy是从Java派生出来的,云行在JVM上。它的目标是成为一个更简单,更直接的语言可以用于脚本语言和全面的编程语言。这一节我们会对比Groovy和Java,让我们更简单的掌握Groovy是如何工作的,并更清晰的了解两个语言的不同。

在Java打印一个字符串代码如下:

在groovy,实现同样的逻辑,代码如下:

有以下几个不同点:

  1. Groovy 没有了System.out 命名空间前缀
  2. 方法的参数没有括号包着
  3. 行尾没有分号

这个例子用了单引号括住了字符串,你也可以用双引号,但是它们有不同的用处。双引号字符串可以包含插值表达式。‘插值’是计算包含占位符的字符串的过程,可以替换占位符为对应的字符串值。这些占位符表达式可以是变量,或者方法。如果占位符表达式包含了方法或者多个变量,需要用花括号包裹并且前面要有$符号(即: ${xxx})。占位符表达式如果只包含一个变量可以简单的在变量前加一个$前缀即可。

下面举个栗子:

Groovy Console工具输出:

字符串解析也允许动态执行一段代码,下面的例子展示了如何打印当前时间:

输出:

上面这段代码结合了Java语法,这样看起来很奇怪,但这样写在Groovy动态编程里面是很正常的写法。

1.2、Classes和成员变量

在Groovy里面创建一个Class和在Java里面创建一个class很类似。这里有一个包含一个成员变量的简单示例:

可以注意到不管是class和成员都没有明确的访问修饰符。Groovy里面默认的访问修饰符和Java是不一样的。在Groovy里面Classes默认的访问修饰符是public的,这个和方法的默认访问修饰符是一样的,但是类的成员变量默认是private的。

Groovy的Class使用,创建一个实例:

输出结果:

你可以使用def关键字来创建一个新的变量。一旦你有了一个class的实例,你可以操作它的成员。成员的get和set访问方法会被Groovy自动添加。你也可以复写它们,例如我们可以复写上面例子中MyGroovyClass的getGreeting方法。如果你什么都不做,你仍然可以使用该类所有成员的get和set方法。

如果你直接引用类的一个成员,而不没有调用它的get方法,实际上你还是调用了get方法。这意味这你没有必要这样写instance.getGreeting(),你可以这样简写instance.greeting来替代:

1.3、方法

就像变量一样,你不需要给一个方法定义返回类型。不过无论是定义返回类型,还是不定义你都可以自由地选择。另一个Java和Groovy的方法的不同点是,在Groovy里面方法的最后一行默认都是return的,即使你没有写return关键字。

为了展示Java和Groovy的不同点,下面的代码示例是Java的方法返回了一个数字的平方的计算结果:

你需要指定方法是public公开访问类型的,并且需要定义方法的返回类型是什么,以及方法的参数的类型是什么。在方法的末尾,你需要返回返回一个和方法返回类型一致的值。

上面的代码转成Groovy:

输出为:

方法的返回类型和方法的参数类型都不需要指定。这里用的是def关键字,而非指定的类型。并且方法在没有使用return关键字的情况下隐藏的返回了一个值。虽然如此,还是建议加上return关键字。当你调用这个方法时,你不需要在带上圆括号和分号了。

在Groovy里面还有另一种更简洁的方式来定义一个新的方法。同样以上面乘方的方法为例:

这个不是一个标准的方法定义,而是一个闭包。这个和Java里面的概念不同,但是它在Groovy里面扮演着非常重要的角色,尤其是在Gradle里面。

1.4、闭包

闭包是一个匿名的代码块,它可以接收参数和返回一个值。它们可以赋值给一个变量,也可以作为一个参数传给方法。

你可以简单的在一对花括号里面加上一段代码来定一个闭包,正如你在前面一个例子中看到的一样。如果你想要让闭包的定义更明确一些,在定义闭包的时候带上类型,例如:

加上Closure后对于任何使用代码的人会更加清晰的知道这里定义了一个闭包。这个例子也引出了另一个隐藏的无类型的参数名字为it。如果你没有明确的为一个闭包定一个参数,Groovy总是会默认添加一个,这个参数就叫做it。如果调用者没有传任何参数,it的值为null,这样代码会非常简洁,但是这只有在这个闭包只有一个参数的情况下是这样的。

在Gradle里面我们时常会用到闭包,例如android块,dependencies块都是闭包。

1.5、集合

在Gradle环境下使用Grovvy有两个非常重要的集合类型:list和map。

使用Groovy创建一个list非常简单。不需要特别的初始化,你可以像这样简单的创建一个list:

遍历这个list也很简单。你可以使用each方法来遍历list里面的每个元素:

each方法可以让你访问list里面的每个元素。你也可以使用it关键字让这个写法更简洁:

在Gradle环境下另一个非常重要的集合类型是Map,Maps在很多Gradle的设置和方法中经常使用到。Map是一个可以简单赋值,包含很多key-value键值对的一个列表。你可以像这样定义一个Map:

访问一个Map的项,可以使用get方法或者方括号

还有一种更简单的方法访问map里面的元素,使用‘.’符号,例如:

 

 

 

 

赞(0) 打赏
未经允许不得转载:花花鞋 » Android Gradle 之Groovy基础介绍
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

国内精品Android技术社区

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏