论坛首页 Java企业应用论坛

关于 Groovy 的一些见解

浏览 2513 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (21) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-07-01   最后修改:2009-07-01
OO

1,最好加上 return

 

groovy 方法(函数)在没有return语句的情况下,

默认把最后一条语句的求值结果作为返回值,但在带有 条件语句 的情况下

似乎有点让人迷惑,看下面的例子(判断一个对象是不是字符串):

 

def isString(str){
	if(String.class.isInstance(str)){
		"YES"
	}else{
		"NO"
	}
}
 

 运行脚本

println isStr("hello")

 打印出(Groovy 1.6以前): null

 不过在Groovy 1.6以后将会打印出 YES

 

修改方案(1):

 

 

def isString(str){
	String.class.isInstance(str)?"YES":"NO"
}

 

修改方案(2):

 

de isString(str){
	if(String.class.isInstance(str)){
		return "YES"
	}else{
		return "NO"
	}
}

 

个人感觉:如果不是实在懒得敲那几个字符,最好加上return,这样也会使程序的结构更加清楚。

 

2,方法(函数)调用的形式:

 

//第二个参数是一个函数
def static func(arg,callback){
	callback(arg)
}

 

运行下面的三行语句

 

func("hello",{println it})
func("hello"){println it}
func "hello",{println it}

 

都会打印出:hello

调用一个方法(函数)就有三种方式,

我不讨论那种方式比较好,

但总感觉第二种调用方式怪怪的。。

看来Groovy的代码风格更是会千差万别了。

 

 

3,def 关键字

def 关键字用来定义方法,属性和本地变量。

 

def 定义的方法 默认 为 public java.lang.Object ×××()

如:

def func(){...}

对应的java方法为

public java.lang.Object func()

 

def定义的属性和本地变量 默认 为 null,赋值之后为

指向具体的对象。

 

4,Groovy不支持的一些java特性

(1)Groovy 不支持 内部类

(2)Groovy 不支持 java创建数组的方式

如 def ints = new int[]{1,2,3},

暂列两条。。

 

 

 

 

   发表时间:2009-07-01  
在Groovy 1.6之后
def isString(str){
	if(String.class.isInstance(str)){
		true
	}else{
		false
	}
}

是不会返回null的
0 请登录后投票
   发表时间:2009-07-01  
Groovy 1.7将支持内部类
0 请登录后投票
   发表时间:2009-07-01  
JohnnyJian 写道
在Groovy 1.6之后
def isString(str){
	if(String.class.isInstance(str)){
		true
	}else{
		false
	}
}

是不会返回null的


果然 ,看来我的版本老了(groovy的eclipse插件)
0 请登录后投票
   发表时间:2009-07-01  
直接写
def isString(str){
	String.class.isInstance(str)
}

不就可以了吗?  何必还要绕个圈子去if(true) return true; else return false;呢
0 请登录后投票
   发表时间:2009-07-01   最后修改:2009-07-01
fcoffee 写道
直接写
def isString(str){
	String.class.isInstance(str)
}

不就可以了吗?  何必还要绕个圈子去if(true) return true; else return false;呢

恩 ,确实
当时写这个例子的时候 ,是想让这三个例子在return的部分对比度强一些
还是换一个例子吧
0 请登录后投票
   发表时间:2009-08-09  
我觉得,有一段时间内,groovy的语法糖(简洁代码)更受青睐,这些细节,估计应用起来不主要吧
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics