文档章节

Gradle升仙路之Groovy(1)

就叫程舰
 就叫程舰
发布于 2018/09/05 09:21
字数 970
阅读 30
收藏 1

构建工具发展史:Ant -- > Maven --> Gradle

Gradle 由Groovy语言编写,因此基于Groovy环境运行。

 

1、Grovvy简介

1.1 场景

Groovy也是另外一种为DSL语言domain specific language,脚本编程语言,matlab是DSL语言的一种,专门用来计算的,还有UML建模语言,在建模方向上有专供。所以DSL语言只用于某一特定领域,也被称为领域语言。

1.2 理解

基于JVM开发的语言,所以能够使用java的库,与java完美结合

1.3 安装Groovy环境

点击这里--》mac中搭建groovy环境

点击这里--》IDEA中创建Groovy简单工程

1.4 自我理解

和java很像,可以创建类同于java的一个类,如下:

所以groovy的工程和java很相似,但是看上面的截图大家会发现,"public"还有这个";"都是灰色的,表示可有可无,这就是groovy的某一个与java区别的地方,同样我们也可以把String[] 参数类型省略,那么我们省略之后也能输出同样的表达结果:

还有一点就是,它与lua语言也有点类似,那就是可以作为脚本语言,那么作为脚本语言我们也可以不需要class的声明,如下:

同样的结果,所以我们对这个简单的了解之后我们进入基础语法的讲解,毕竟groovy虽然与java差不多,但还是有些不同的地方。

1.5 groovy基础语法

1.5.1 变量的类型

对象类型(没有int double类型,都会转换成Integer,Double)

1.5.2 变量的定义

1.5.1 强类型、弱类型

强类型定义就是类似与java的形式,String name ="mujiutian",而弱类型定义的话,我们类似于java10的var类型,有系统自己转换为自己认为的数据类型,如下

1.5.2 GString可扩展表达式

由上我们可以看到数据类型就是GString,这个就是可扩展的类型,然后我们可以用'' 表示,同样可以用""表示。

1.5.3 字符串普通常见方法

def name = "mujiutian"

def name1 = "osc"

def name2 = 'oscChina'

//name中间。两边字符串为M,达到11长度
println name.center(11,"M")
//在左边添加2的字符串,达到9的长度
println name1.padLeft(9,"2")
//比较两个字符串大小
println name.compareTo(name1)
//比较两个字符串大小,和compareTo一样
println name > name1
//获取第一个字符
println name[0]
//获取0-3的字符
println name[0..3]
//两个字符串相减,前者必须包含后者
println name2.minus(name1)
//和上面一样
println name2 - name1
//反过来
println name2.reverse()

println name2.capitalize()

结果为:

MmujiutianM
222222osc
-2
false
m
muji
China
China
anihCcso
OscChina

 1.5.4 switch语句

def var = 1.5

def result

switch (var){
    case "soo":
        result = "this is soo"
        break
    case Integer:
        result = "this is int type"
        break
    case [5,6,7,'in']:
        result = "hah"
        break
    case 10..90:
        result ='dsk'
        break
    case BigDecimal:
        result ='this is bigdecimal'
        break
    default:
        break
}

println result

结果为:

this is bigdecimal

1.5.5 for循环

//直接循环
def sum1 = 0

for (i in 0..9){
    sum1 +=i
}

//list循环
def sum2 =0
for (i in [1,2,3,4,5,6,7]){
    sum2 +=i
}

//map循环
def sum3 =0
for (i in ['key1':1,'key2':2,'key3':3]){
    sum +=i.value
}

1.6 groovy闭包,类似于java的lambda表达式

1.6.1 闭包概念:一个代码块

1.6.2 闭包参数:一个或者多个

1.6.3 闭包返回值:把println 换成return 

def clouser = {String name -> return "hello ${name} " }


def result = clouser.call('groovy')

println(result)

闭包的用法类似与java8中的lambda表达式,如下:

int fab(int num){
    int result = 1
    //从1增加到num,downto(1,..)是下降到1
    1.upto(num,{num1 -> result *= num1})
    return result
}

int cal(int num){
    int result =0
    //起始值0
    num.times {
        num1 -> result*=num1
    }
}

1.6.4闭包关键变量

this、owner、delegate

 

 

© 著作权归作者所有

共有 人打赏支持
就叫程舰

就叫程舰

粉丝 115
博文 200
码字总数 142961
作品 0
海淀
程序员
私信 提问
Andorid Gradle插件

1. Gradle 1). 资料 Gradle 基于 groovy 语言,groovy 官网 Gradle DSL Android Plugin DSL Gradle task 2). 查看所有任务 compileDebugJavaWithJavac:编译 java 文件 processDebugManifest......

凌浩雨
2018/06/06
0
0
Gradle 从入门到精通

Gradle 从入门到精通 Java 构建Gradle 逐渐出现在各个开源软件中,特别是Android平台。虽然工具无对错用的好即可,但是美帝亡我之心不死,从ANT(纯手动)到MAVEN(套餐模式)再到Gradle(半...

精通吹水
2016/03/08
1K
9
Android自定义Gradle插件基础

背景 做为一个Android的开发者,我相信现在几乎所有的Android开发都是利用Android Studio作为开发工具的,那么我们对于利用Gradle来配置项目一定也不陌生,那么我们怎么样可以自己来实现一个...

Only凹凸曼
2018/01/06
0
0
gradle :Java项目开发环境构建工具

gradle Gradle 是以 Groovy 语言为基础,面向Java应用为主。基于DSL(领域特定语言)语法的自动化构建工具。 中文名 gradle 基 础 Groovy 语言 服务对象 Java应用 整体设计 以作为一种语言为...

惠城君
2015/12/18
31
0
android 如何引入gradle 插件源码

参考: 1,Android Gradle Plugin解析 2,Android Gradle Plugin 源码阅读与编译 方法步骤: 1,专门建立一个gradle 插件module。 建立一个 android lmodule。 删除src/main/下的所有文件 在src...

Carlyle_Lee
2018/07/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java引用传递和JVM堆栈的关系说明

通过代码说明 Java 引用传递在堆栈上的关系。 可以从JVM的内存空间存放上说明,值传递 和引用传递。 堆(线程共享):对象、对象的全局变量、数组 栈(线程私有):声明为局部变量的 基本数据...

冷基
6分钟前
0
0
直接插入排序

直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。直接插入排序的时间复杂度为O(n^2),但性能比冒泡排序和简单选择排序的性能要好一点...

niithub
6分钟前
0
0
data.world

产品思路: 1、共享数据集。 2、数据结构化。 3、数据展示。 https://data.world

colin_86
37分钟前
2
0
Akka实战:HTTP大文件断点上传、下载,秒传

访问:https://github.com/yangbajing/scala-applications/tree/master/file-upload 获取本文所述完整源码,包括Akka HTTP后端和HTML5实现的前端。 在很多应用里面都会有类似大文件上传的需求...

羊八井
今天
5
0
node:event-loop & 宏任务 & 微任务

event-loop(事件轮询) 代码进入执行栈后会判断当前代码是同步任务还是异步任务,如果是同步任务则会将任务调到主线程同步执行,如果是异步任务则会将任务调到异步队列中。 主线程同步任务执...

小草先森
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部