加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy基本语法(2)

发布时间:2020-12-14 16:55:21 所属栏目:大数据 来源:网络整理
导读:4、静态import ? ? ? 我是最早在.net framework 3.5上使用类似 import?static 这种语法的,用起来相当方便的说,但JDK一直没有引入这玩意儿,按道理说加上这么个小功能是很容易实现的。不过Groovy倒是带来来功能更强大的import static语法,用起来也很方便:

4、静态import

? ? ? 我是最早在.net framework 3.5上使用类似import?static这种语法的,用起来相当方便的说,但JDK一直没有引入这玩意儿,按道理说加上这么个小功能是很容易实现的。不过Groovy倒是带来来功能更强大的import static语法,用起来也很方便:

package plswg.edu.groovy.basic


// 将Integer类的MAX_VALUE静态成员变量引入
import static Integer.MAX_VALUE

// 将Double类的parseDoubl静态成员方法引入
import static Double.parseDouble

// 给静态引入赋予别名
import static Boolean.TRUE  as T		// 将Boolean.TRUE取名为T
import static Boolean.FALSE as F		// 将Boolean.FALSE取名为F

// 给静态引入的方法赋予别名
import static Calendar.getInstance as now


// 代码中凡是用到MAX_VALUE,指的都是Integer.MAX_VALUE
println MAX_VALUE


// 代码中凡是用到parseDouble,指的都是Double.parseDouble
s = "123.123"
println parseDouble(s);	


// 代码中凡是使用T的地方表示true,使用F的地方表示false
println T
println !T
println F


// 代码中凡是使用now的地方表示Calendar.getInstance
println now().get(Calendar.HOUR)
? ? ? 这玩意儿的主要作用就是避免重复书写哪些又臭又长的类名,随着JDK类库的不断增加,类名字是越来越长,像造句一样,import static恰好解决了这一问题,还是很贴心的。

5、分支结构语句

? ? ? Groovy的结构化语句仍旧是三种:顺序结构、分支结构和循环结构,其中分支结构和循环结构增加了很多意想不到的功能,先看分支结构:

package plswg.edu.groovy.basic

// groovy中if条件分支的新规定

// groovy中,非0的数值可以表示true
int num = 0
if (num) {
	println "True"
} else {
	println "False"
}

println (++num ? "True" : "False")

if (!!num) {		// !!运算符可以将num转化为boolean类型
	println "num=${num}为${!!num}"
}
println ""


// 引用为null时,表示false
Object o = null
if (o) {
	println "True"
} else {
	println "False"
}
o = new Date()
if (o) {
	println "True"
} else {
	println "False"
}
println ""


// 字符串为""时,表示false
String s = ""
if (s) {
	println "True"
} else {
	println "False"
}
s += "hello"
if (s) {
	println "True"
} else {
	println "False"
}
println ""


// 集合为空时,表示False
ArrayList array = new ArrayList()
if (array) {
	println "True"
} else {
	println "False"
}
array.add(100)
if (array) {
	println "True"
} else {
	println "False"
}
println ""


// groovy中switch选择分支的新规定

// switch对字符串类型的支持

print "Please input your words: "
s = new BufferedReader(new InputStreamReader(System.in)).readLine()

switch (s) {
case "how are you":
	println "fine,thank you"
	break;
case "how do you do":
	println "how do you do too"
	break;
default:
	println "nice to meet you"
}


// switch对集合和范围的支持
n = new Random().nextInt(101)
print "you got ${n} point,"
switch (n) {
case [98,99,100]:		// n为98,100这三个数字时
	println "very good!!"
	break;
case 90 .. 97:			// n为90-97之间时
	println "nice job!!"
	break;
case 70 .. 89:			// n为70-89之间时
	println "good"
	break;
case 60 .. 79:			// n为60-79之间时
	println "can be better"
	break;
case {it > 0 && it < 60}:	// n比0大且比60小时
	println "too bad"
	break;
case 0:					// n为0时
	println "nothing to say"
	break;
}
? ? ? ?首先,Groovy对boolean类型放宽了限制:

  • 常量true和false分别表示“真”和“假”;
  • null表示false,非null表示true;
  • 空字符串""表示false,非空字符串表示true;
  • 0表示false,非0表示true;
  • 空集合表示false,非空集合表示true;
? ? ? 好了,从这一角度上,Groovy确实和Javascript或者PHP非常相似了,用起来非常方便。

? ? ? Groovy中对于switch语句的修改也是非常夸张的,这让我甚至有些怀疑Groovy中的switch是否还能达到O1的执行效率,因为Groovy的swtich表现的太像嵌套的if...else if了,在例子中,switch的case后面可以跟随如下几种玩意儿:

  • 常量,在Groovy中,case后的常量包括数值型常量或字符串类型常量,方便很多了,JDK7中新增加了使用字符串常量的case语句,而在.net framework 1.1中早就有了,诸如Basic,PHP,Python,Javascript等脚本,更是一开始就支持字符串常量的case语句;
  • Range:即范围,语法?n1 .. n2 表示n1和n2之间的所有数值n(n1 <= n <= n2);
  • Collection:集合,语法?[a1,a2,a3,...,an],表示由中括号中的n个元素构成的集合,其中各个元素类型不必统一;
  • 闭包:由 { 语句 } 构成的匿名函数体,这个后面会重点讲述,这里只要知道,一旦case之后的闭包返回true,则冒号之后的代码将会执行;
? ? ? 总之Groovy对分支语句的改造,让其更符合主流动态语言的特点,目前大家都在玩动态语言,就算强类型语言例如C#也在向动态语言方向靠拢,C++有泛型可以一直淡定,Java也有泛型,但那就不是个玩意儿。Groovy这下改的彻底,该有的全都有了!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读