抓重点学 Gradle

您所在的位置:网站首页 groovy函数调用 抓重点学 Gradle

抓重点学 Gradle

2023-03-27 11:17| 来源: 网络整理| 查看: 265

Closure(闭包)

说了这么多,是时候到主角—Closure(闭包)出场了。Closure(闭包)是Groovy中函数式编程的最好体现。所谓函数式编程跟我们熟知的面向过程编程、面向对象编程一样也是一种“编程范式”,也就是如何编写程序的方法论。函数式编程最鲜明的特点是函数是“第一等公民“,所谓“第一等公民”,指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值。

在Groovy中,闭包表示一段可以执行的代码块,定义如下:

{ [closureParameters -> ] statements }复制代码

其中,闭包必须使用花括号括起来,[closureParameters -> ]表示闭包参数列表,可以为空,但其为空时,闭包默认会隐含一个参数it,statements是闭包需要执行的代码,最后一行代码是返回值。

定义好闭包后,可以通过closure(参数)或者closure.call(参数)调用

举个例子:

def code={123} println code.call(1) println code() 输出: 123 123 def add = { int x,y-> x+y } println add(3,4) 输出: 7 def isEven = { it%2 == 0 } println isEven(7) 输出: false复制代码

Closure使用注意点

省略圆括号

在Groovy中我们要遍历一个List,一般做法是这样的:

def list = [1,2,3,4,5] list.each{ println it }复制代码

我们查一下它的API文档,是这样的

method

What the hell!!!完全跟上面写法对应不上呀,实际上是因为,当函数的最后一个参数是闭包的话,可以省略圆括号,所以上面完整写法应该是这样的:

def list = [1,2,3,4,5] list.each({ println it })复制代码

还是不对呀,明明是两个参数呀,怎么只传了一个。让我们查一下文档,这个方法定义在DefaultGroovyMethods中,看一下它的类说明:

This class defines new groovy methods which appear on normal JDK classes inside the Groovy environment. Static methods are used with the first parameter being the destination class, i.e. public static String reverse(String self) provides a reverse() method for String.复制代码

恍然大悟,原来这个类定义了Groovy环境下一些类支持的方法,而其中定义的静态方法第一个参数仅仅是为了标示目标类,所以是不需要传递的。

GradleGradle是什么

​ Gradle是基于Groovy定义了一套DSL,所谓DSL(领域专用语言),就是专门针对某一特定问题的计算机语言。而Gradle我们可以认为是经过“定制”的Groovy,专门用于项目构建的语言。

Gradle学习— Task,Project,Plugin

虽然使用Android Studio开发的话,Gradle环境在IDE会自动下载集成,但要学好Gradle,建议还是自己部署一下环境。从Gradle官网下载gradle后,配置一下环境变量。Gradle的环境就搭建起来了。

和Groovy同理,要深入Gradle的话,要学的东西也不会少,但是作为普通的开发者,个人觉得把三个概念搞懂就可以了:Task,Project,Plugin

Project

在Gradle中,每一个project,Gradle都会创建一个Project对象,并将这个对象与构建脚本相关联。也就是说,Project对象与build.gradle是一对一的关系,所以你在build.gradle写的每一个配置其实就是它对应的Project对象的一个方法或者一个变量值,譬如说我们配置项目依赖:

dependencies { classpath 'com.android.tools.build:gradle:1.5.0' }复制代码

它其实对应Project对象void dependencies(Closure configureClosure);方法。

从面向对象的角度去理解Gradle,是不是觉得容易多了。

Task

Task表示一些需要执行的构建任务,比如说lint检查任务。定义一个Task可以这样写:

task hello


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3