Android 之 Groovy基础学习

Android 之 Groovy基础学习

在Groovy中,分号不是必须的。

一、字符串

在Groovy中,单引号、双引号都可以定义一个字符串常量,
不同的是单引号标记的是纯粹的字符串常量,而不是对字符串里的表达式做运算,但是双引号可以。如下:
1.

task printStringClass  <<  {
	def str1='单引号'
	def str2="双引号"

	println "单引号定义的字符串类型:"+str1.getClass().name
	println "双引号定义的字符串类型:"+str2.getClass().name
}

执行结果如下:

单引号定义的字符串类型:java.lang.String
双引号定义的字符串类型:java.lang.String
task printStringVar << {
	def name="张三"
	
	println '单引号的变量计算:${name}'
	println "双引号的变量计算:${name}"
}

执行结果如下

单引号的变量计算:${name}
双引号的变量计算:张三

双引号可以直接进行表达式计算,${name}, ${1+1}等,只有一个变量可以省略花括号,如$name

二、集合(常见的集合有List , Set , Map , Queue)

List
定义:

task printList << {
	def numList = [1,2,3,4,5,6];
	println numList.getClass().name
}

访问List中的元素

task printList <<{
	def numList = [1,2,3,4,5,6];
	println numList.getClass().name
	
	println numList[1] //访问第二个元素
	println numList[-1] //访问最后一个元素
	println numList[-2] //访问倒数第二个元素
	println numList[1..3] //访问第二到4个元素
}

迭代操作,访问List中每一个元素,each方法

task printList <<{
	def numList = [1,2,3,4,5,6];
	println numList.getClass().name
	
	println numList[1] //访问第二个元素
	println numList[-1] //访问最后一个元素
	println numList[-2] //访问倒数第二个元素
	println numList[1..3] //访问第二到4个元素
	
	numList.each{
	println it
	}
}

it变量就是正在迭代的元素

Map
定义:

task printlnMap <<{
	def map1 = ['width':1024, 'height':768]
	println map1.getClass().name
}

访问,采用map[key]或者map.key的方式

task printlnMap <<{
	def map1 = ['width':1024, 'height':768]
	println map1.getClass().name
	
	println map1['width']
	println map1.height
}

对于Map的迭代,当然少不了each方法,只不过被迭代的元素是一个Map.Entry的实例

task printlnMap <<{
	def map1 = ['width':1024, 'height':768]
	println map1.getClass().name
	
	println map1['width']
	println map1.height
	map1.each{
	println "key:${it.key},Values:${it.value}"
	}
}

对于集合,Groovy还提供了collect, find, findAll等便捷的方法。

三、方法

1.括号是可以省略的

task invokeMethod <<{
	method1(1,2)
	method1 1, 2
	}
	def method1(int a, int b){
	println a+b
}

上面两种调用方法是一样的,但第二种更简洁,Gradle中采用第2种。
2.return是可以不写的
在Groovy中,我们定义有返回值的方法时,return语句不是必须的。当没有return的时候,Groovy会把方法执行过程中的最后一句代码作为其返回值。

task printMethodReturn << {
	def add1=method2 1,2
	def add2=method2 5,3
	println "add1:${add1}, add2:${add2}"
}
def method2(int a, int b){
	if(a>b){
	a
	}else{
	b
	}
}

执行后输出

add1:2,add2:5

3.代码块是可以作为参数传递的

//呆板的写法其实是这样
numList.each({println it})
//格式化一下
numList.each({
	println it
})
//Groovy规定,如果方法的最后一个参数是闭包,可以放到方法外面
numList.each(){
	println it
}
//然后方法可以省略
numList.each{
	println it
}

四、JavaBean

五、闭包

参考书籍

Android Gradle 权威指南 飞雪无情@编著


版权声明:本文为weixin_44715384原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。