Groovy语言学习

Groovy 和 Java 一样也是一门 JVM 语言,最终都会编译成 .class 文件然后运行在 JVM 上,Groovy 语言类似脚本,语法简单更灵活,所以在编写项目脚本构建上优势更加明显。
如何在Android Studio 运行Groovy程序请看我的文章 Android Studio 中如何运行 groovy 程序

1、一些前提知识

 1. Groovy注释标记和Java一样,支持// 或者 /**/。
 2. Groovy语句可以不用分号结尾。
 3. Groovy中支持动态类型,即定义变量的时候可以不指定其类型。
	Groovy中,变量定义可以使用关键字def。
	注意,虽然def不是必须的,但是为了代码清晰,建议还是使用def关键字
	def a = 1   // 可以不使用分号结尾
   	def b = "hello world"
   	def int x = 1  // 变量定义时,也可以直接指定类型
 4. 函数定义时,参数的类型也可以不指定。比如
	String testFunc(arg1, arg2){
    // 无需指定参数类型
	  ...
	}
 5. 除了变量定义可以不指定类型外,Groovy中函数的返回值也可以是无类型的。比如
	def noReturnFunc() {
    // 无类型的函数定义,必须使用def关键字
    	last_line   // 最后一行代码的执行结果就是本函数的返回值
	}
 6. 如果指定了函数返回类型,则可不必加def关键字来定义函数。
	String getHelloWorld(){
   
  		return "hello world"
	}
 7. 函数返回值:Groovy的函数里,可以不使用return xxx来设置xxx为函数返回值。
	如果不使用return语句的话,则函数里最后一句代码的执行结果被设置成返回值。
	比如:下面这个函数的返回值是字符串"hello world"
	def getHelloWorld() {
   
     	"hello world" // 如果这是最后一行代码,则返回类型为String
      	1 // 如果这是最后一行代码,则返回类型为Integer
	}
	注意,如果函数定义时候指明了返回值类型的话,函数中则必须返回
	正确的数据类型,否则运行时报错。如果使用了动态类型的话,
	你就可以返回任何类型了。
 8. Groovy对字符串支持相当强大,充分吸收了一些脚本语言的优点:
	(1) 单引号''中的内容严格对应Java中的String,不对$符号进行转义。
   		def singleQuoteStr = 'this is $ dolloar'  
   		// 输出就是 this is $ dolloar
 	(2) 双引号""的内容则和脚本语言的处理有点像,如果字符中有$号的话,
		则它会$表达式先求值。
   		def doubleQuoteNoDollar = "this is one dollar" 
   		// 输出 this is one dollar
   		def x = 1
   		def doubleQuoteDollar = "this is $x dolloar" 
   		// 输出 this is 1 dolloar
	(3) 三个引号'''xxx'''中的字符串支持 随意 换行。比如
   		defmultieLines = ''' begin
    		line  1
    		line  2
     		end '''
 9. 除了每行代码不用加分号外,Groovy中函数调用的时候还可以不加括号。比如:
	println("test") ---> println "test"
	注意,虽然写代码的时候,对于函数调用可以不带括号,
	但是Groovy经常把属性和函数调用混淆。比如
	def getHelloWorld() {
   
     	"hello world" 
	}
	getHelloWorld() 
	// 如果不加括号的话,Groovy会误认为getHelloWorld是一个变量。
	所以,调用函数要不要带括号,如果这个函数是Groovy API或者Gradle API
	中比较常用的,比如println,就可以不带括号。
	否则还是带括号。Groovy自己也没有太好的办法解决这个问题。

2、Groovy的数据类型

Groovy中的数据类型主要介绍以下几种:

  1. 基本数据类型。
  2. 容器类。
  3. 闭包。

2.1 基本数据类型

作为动态语言,Groovy世界中的所有事物都是对象。所以,int,boolean这些Java中的基本数据类型,在Groovy代码中其实对应的是它们的包装数据类型。比如int对应为Integer,boolean对应为Boolean。

2.2 容器类

Groovy中的容器类很简单,就三种:

  1. List:链表,其底层对应Java中的List接口,一般用ArrayList作为真正的实现类。
  2. Map:键-值表,其底层对应Java中的LinkedHashMap。
  3. Range:范围,它其实是List的一种拓展。

下面了解一下它们的用法,下面是一些简单的例子:

  1. List类
1.变量定义:List变量由[]定义,比如
	def aList = [5,'string',true]  
	// List由[]定义,其元素可以是任何对象
2.变量存取:可以直接通过索引存取,而且不用担心索引越界。
	如果索引超过当前链表长度,List会自动往该索引添加元素
	assert aList[1] == 'string'
	assert aList[5] == null //第6个元素为空
	aList[100] = 100 //设置第101个元素的值为100
	assert aList[100] == 100
	那么,aList到现在为止有多少个元素呢?
	println aList.size  ===> 结果是101
  1. Map类
1.变量定义:Map变量由[:]定义,比如
	def aMap = ['key1':'value1','key2':true]
2.Map由[:]定义,注意其中的冒号。冒号左边是key,右边是Value。
	key必须是字符串,value可以是任何对象。
3.另外,key可以用''""包起来,也可以不用引号包起来。比如
	def aNewMap = [key1:"value",key2:true] 
	//其中的key1和key2默认被处理成字符串"key1"和"key2"
4.不过Key要是不使用引号包起来的话,也会带来一定混淆,比如
	def key1="wowo"
	def aConfusedMap=[key1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值