Groovy语法
基本语法1.Groovy注释标记和Java一样,支持//或者/**/ 2.Groovy语句可以不用分号结尾。Groovy为了尽量减少代码的输入 。 3.单引号 单引号中的内容严格对应Java中的String,不对$符号进行转义。 4.双引号 双引号的内容和脚本语言的处理有点像,它会对表达式先求值。 def x = 100 def s1 = "i am $x dolloar" println( s1 ) 5.三引号 三引号中的字符串支持随意换行。 def s1 = ''' x y z f ''' println(s1) 定义变量Groovy中支持动态类型,即定义变量的时候可以不指定其类型。Groovy中,变量定义可以使用关键字def,注意,虽然def不是必须的,但是为了代码清晰,建议还是使用def关键字。 def a = 1 //定义一个整形 def b = "字符串" //定义一个字符串 def double c = 1.0 //定义一个 double 类型,也可以指定变量类型 定义函数无返回类型的函数定义,必须使用def关键字,最后一行代码的执行结果就是本函数的返回值。如果指定了函返回类型,则可不必加def关键字来定义函数。可以不使用return来设置函数返回值,如果不使用return的话,则函数里最后一句代码的执行结果被设置成返回值。 String fun3(){ return "返回值" } 断言(1)断言变量为空 def s1 = null assert s1 (2)断言变量的长度 def s2 = "abc" assert s2.size()>3 如果断言发生,断言后面的代码无法执行。 循环for (i = 0; i < 5 ; i++) { println("测试") } for (i in 0..5){ println("hello world") } 循环timetimes表示从0开始循环到4结束 4.times { println it } 三目运算符java语法 def name def result = name != null ? name : "abc" println(result) groovy语法 def name = 'd' def result = name?: "abc" 捕获异常//第一种写法,Java 写法 try { println 5 / 0 } catch (Exception e) { } //第二种写法,Groovy 写法 try { println 5 / 0 } catch (anything) { } 这里的any并不包括Throwable,如果你真想捕获everything,你必须明确的标明你想捕获的Throwable。 switchage = 36 def rate switch (age) { case 10..26: rate = 0.05 break case 27..36: rate = 0.06 break case 37..46: rate = 0.07 break default: throw new IllegalArgumentException() } println( rate) 判断是否为真Person person //Java 写法 if (person!= null){ if (person.Data!=null){ println person.Data.name } } //Groovy println person?.Data?.name asTypeasType就是数据类型转换 //String 转成 int def s2 = s1 as int //String 转成 int def s3 = s1.asType(Integer) Groovy数据类型(1)一个是Java中的左本数据类型。 (2)另外一个是Groovy的容器类。 List:其底层对应Java中的List接口,一般用ArrayList作为真正的实现类。 //变量定义:List变量由[]定义,其元素可以是任何对象 def aList = [5,'string',false] println(aList) println aList[0] //获取第1个数据 println aList[1] //获取第2个数据 println aList[2] //获取第3个数据 println aList[3] //获取第4个数据 println( "集合长度:" + aList.size()) //赋值 aList[10] = 100 //给第10个值赋值 aList<<10 //在 aList 里面添加数据 println aList println "集合长度:" + aList.size() Map:其底层对应Java中的LinkedHashMap def map = [key1: "value1",key2: "value2",key3: "value3"] println map //[key1:value1,key2:value2,key3:value3] println("数据长度:" + map.size()) //数据长度:3 println(map.keySet()) //[key1,key2,key3] println(map.values()) //[value1,value2,value3] println("key1的值:" + map.key1) //key1的值:value1 println("key1的值:" + map.get("key1")) //key1的值:value1 //赋值 map.put("key4","value4") Iterator it = map.iterator() while (it.hasNext()) { println "遍历map: " + it.next() } //遍历map: key1=value1 //遍历map: key2=value2 //遍历map: key3=value3 //遍历map: key4=value4 map.containsKey("key1") //判断map是否包含某个key map.containsValue("values1") //判断map是否包含某个values map.clear() //清除map里面的内容 Set set = map.keySet(); //把 map 的key值转换为 set Range:它其实是List的一种拓展。 def range = 1..5 println(range) //[1,2,3,4,5] range.size() //长度 range.iterator() //迭代器 def s1 = range.get(1) //获取标号为1的元素 range.contains( 5) //是否包含元素5 range.last() //最后一个元素 range.remove(1) //移除标号为1的元素 range.clear() //清空列表 (3)最后一个非常重要的闭包。 闭包,英语叫Closure,是Groovy中非常重要的一个数据类型或者说一种概念。闭包,是一种数据类型,它代表一段可执行的代码。 def xxx = {paramters -> code} //或者 def xxx = {无参数,纯code} 从cc++语言的角度看,闭包和函数指针很像,闭包定义好后,要调用它的方法就是: 闭包对象.call(参数) 或者更像函数指针调用的方法: 闭包对象(参数) aClosure.call("this is string",100) //或者 aClosure("this is string",100) 省略圆括号Groovy中,当函数的最后一个参数是闭包的话,可以省略圆括号。 def fun(int a1,String b1,Closure closure){ //dosomething closure() //调用闭包 } fun (4,"test",{ println"i am in closure" }) 再识GroovyGroovy会先把xxx.groovy中的内容转换成.class文件,每个.class文件都默认有静态main方法,这样,当我们groovy xxx.groovy的时候,其实就是用java去执行这个main函数。 脚本中的所有代码都会放到run函数中。 @ToString1.includeNames false 显示的时候是否带上属性的名称,比如name=Groovy In Action 2.excludes 哪些属性不显示。 3.includes 要显示哪些属性。 4.includeSuper false 是否显示父类的ToString效果。 5.includeSuperProperties false 是否显示父类的属性。 6.includeFields false 是否显示类字段(比如private字段,public的会自动转成属性)。 7.ignoreNulls false 是否忽略NULL值。 8.includePackage false 类名是否包含包名。 9.cache false 是否把ToString的值缓存起来。 作用域public(默认)、private、 protected *.操作操作的对象是一个List对象 参考文档:http://www.groovy-lang.org/api.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- TextMate的Delphi语法
- 关于lua corountine的简历和收益函数的困惑
- 有用的lua学习网址
- java – Jar文件ADD DIRECTORY ENTRIES导出jar时的Eclips
- golang--- 32位系统下atomic.AddUint64导致程序崩溃及解决办
- DAVE SDK 4.1.2 Help content (翻译)——Sharability
- delphi – 将流写入RCDATA资源
- java – 通过Hessian传输Spring远程传输时,BigDecimal值始
- [VB.NET]Visual Studio 2005与.NET有区别吗?
- delphi – 如何从提供类名的字符串创建实例?