Gradle for Android 第七篇( Groovy入门 )

栏目: Groovy · 发布时间: 7年前

内容简介:Gradle for Android 第七篇( Groovy入门 )

迄今为止,我们已经学些了众多gradle构建的概念以及如何运行tasks。在这一章,我们将对这些概念有一个更深的理解,然后开始构建我们自己的tasks。一旦我们掌握了如何编写自定义tasks,那么我们就可以试着编写自己的插件,以达到在多个项目中复用的目的。

在我们创建传统tasks之前,我们有必要了解些Groovy的基本语法。因为这理解Groovy如何运行会使得我们能更好的理解tasks和插件。理解Groovy同样帮助我们理解Gradle如何工作,以及为什么这些配置文件需要这样配置。

在这一章,我们将会遵循以下主题:

  • 理解Groovy
  • 重新认识tasks
  • Hooking Android插件
  • 编写自定义插件

理解Groovy

大部分Android开发者也是名 Java 开发者,和Java对比,Groovy也是运行在JVM上。当然,如果你是名Java开发者,那么Groovy将会变得容易阅读,但是在编写你自己的Groovy代码之前,你必须对Groovy有一个全面的了解。

简介

Groovy起源于Java,其运行在JVM上。其目标是创造更简单,更直接的语言,不仅仅在脚本语言上或者编译语言上运行。通过这一章节,我们将对Groovy和Java进行对比。

在Java中,打印一天String应该是这样的:

System.out.println("Hello, world!");

在Groovy中,你可以这么写:

println 'Hello, world!'

你应该主要到几点不同之处:

  • 没有了System.out
  • 没有了方括号
  • 列结尾没有了;

这个例子同样使用了单引号,你可以使用双引号或者单引号,但是他们有不同的用法。双引号可以包含插入语句。插入是计算一个字符串包含placeholders的过程,并将placeholders的值替换,这些placeholder可以是变量甚至是方法。Placeholders必须包含一个方法或者变量,并且其被{}包围,且其前面有$修饰。如果其只有一个单一的变量,可以只需要$。下面是一些基本的用法:

def name = 'Andy'
def greeting = "Hello, $name!"
def name_size "Your name is ${name.size()} characters long."

greeting应该是“ Hello,Andy”,并且 name_size 为 Your name is 4 characters long.string的插入可以让你更好的动态执行代码。比如

def method = 'toString'
 new Date()."$method"()

这在Java中看起来很奇怪,但是这在groovy里是合法的。

Classes和members

Groovy里面创建类和Java类似,举个例子:

class MyGroovyClass {
       String greeting
       String getGreeting() {
           return 'Hello!'
        } 
}

注意到不论是类名还是成员变量都没有修饰符。其默认的修饰符是类和方法为public,成员变量为private。

当你想使用MyGroovyClass,你可以这样实例化:

def instance = new MyGroovyClass()
instance.setGreeting 'Hello, Groovy!'
instance.getGreeting()

你可以利用def去创建变量,一旦你为你的类创建了实例,你就可以操作其成员变量了。get/set方法groovy默认为你添加 。你甚至可以覆写它。

如果你想直接使用一个成员变量,你可以这么干:

println instance.getGreeting()
 println instance.greeting

而这二种方式都是可行的。

方法

和变量一样,你不必定义为你的方法定义返回类型。举个例子,先看java:

public int square(int num) {
       return num * num;
} 
square(2);

你需要将该方法定义为public,需要定义返回类型,以及入参,最后你需要返回值。

我们再看下Groovy的写法:

def square(def num) {
       num * num
 }
 square 4

没有了返回类型,没有了入参的定义。def代替了修饰符,方法体内没有了return关键字。然而我还是建议你使用return关键字。当你调用该方法时,你不需要括号和分号。

我们设置可以写的更简单点:

def square = { num ->
       num * num
}
square 8

###闭包

闭包是一段匿名的方法体,其可以接受参数和返回值。它们可以定义变量或者可以将参数传给方法。

你可以简单的使用方括号来定义闭包,如果你想详细点,你也可以这么定义:

Closure square = {
       it * it
}
square 16

添加了Closure,让其更加清晰。注意,当你没有显式的为闭包添加一个参数,groovy会默认为你添加一个叫做it。你可以在所有的闭包中使用it,如果调用者没有定义任何参数,那么it将会是null,这会使得你的代码更加简洁。

在grade中,我们经常使用闭包,例如Android代码体和dependencies也是。

Collections

在groovy中,有二个重要的容器分别是lists和maps。

创建一个list很容易,我们不必初始化:

List list = [1, 2, 3, 4, 5]

为list迭代也很简单,你可以使用each方法:

list.each() { element ->
       println element
}

你甚至可以使得你的代码更加简洁,使用it:

list.each() {
       println it
}

map和list差不多:

Map pizzaPrices = [margherita:10, pepperoni:12]

如果你想取出map中的元素,可以使用get方法:

pizzaPrices.get('pepperoni')
pizzaPrices['pepperoni']

同样的groovy有更简单的方式:

pizzaPrices.pepperoni

是不是简单到爆,瞬间感觉Java太复杂的有木有。下一章我们将学习Groovy在Gradle中的使用情况,相信你会喜欢!


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Chinese Authoritarianism in the Information Age

Chinese Authoritarianism in the Information Age

Routledge / 2018-2-13 / GBP 115.00

This book examines information and public opinion control by the authoritarian state in response to popular access to information and upgraded political communication channels among the citizens in co......一起来看看 《Chinese Authoritarianism in the Information Age》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具