1.2 groovy 语法 2

4、静态import

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

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package plswg.edu.groovy.basic  
  2.   
  3.   
  4. // 将Integer类的MAX_VALUE静态成员变量引入  
  5. import static Integer.MAX_VALUE  
  6.   
  7. // 将Double类的parseDoubl静态成员方法引入  
  8. import static Double.parseDouble  
  9.   
  10. // 给静态引入赋予别名  
  11. import static Boolean.TRUE  as T        // 将Boolean.TRUE取名为T  
  12. import static Boolean.FALSE as F        // 将Boolean.FALSE取名为F  
  13.   
  14. // 给静态引入的方法赋予别名  
  15. import static Calendar.getInstance as now  
  16.   
  17.   
  18. // 代码中凡是用到MAX_VALUE, 指的都是Integer.MAX_VALUE  
  19. println MAX_VALUE  
  20.   
  21.   
  22. // 代码中凡是用到parseDouble, 指的都是Double.parseDouble  
  23. s = "123.123"  
  24. println parseDouble(s);   
  25.   
  26.   
  27. // 代码中凡是使用T的地方表示true,使用F的地方表示false  
  28. println T  
  29. println !T  
  30. println F  
  31.   
  32.   
  33. // 代码中凡是使用now的地方表示Calendar.getInstance  
  34. println now().get(Calendar.HOUR)  
      这玩意儿的主要作用就是避免重复书写哪些又臭又长的类名,随着JDK类库的不断增加,类名字是越来越长,像造句一样,import static恰好解决了这一问题,还是很贴心的。

5、分支结构语句

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

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package plswg.edu.groovy.basic  
  2.   
  3. // groovy中if条件分支的新规定  
  4.   
  5. // groovy中,非0的数值可以表示true  
  6. int num = 0  
  7. if (num) {  
  8.     println "True"  
  9. else {  
  10.     println "False"  
  11. }  
  12.   
  13. println (++num ? "True" : "False")  
  14.   
  15. if (!!num) {        // !!运算符可以将num转化为boolean类型  
  16.     println "num=${num}为${!!num}"  
  17. }  
  18. println ""  
  19.   
  20.   
  21. // 引用为null时,表示false  
  22. Object o = null  
  23. if (o) {  
  24.     println "True"  
  25. else {  
  26.     println "False"  
  27. }  
  28. o = new Date()  
  29. if (o) {  
  30.     println "True"  
  31. else {  
  32.     println "False"  
  33. }  
  34. println ""  
  35.   
  36.   
  37. // 字符串为""时,表示false  
  38. String s = ""  
  39. if (s) {  
  40.     println "True"  
  41. else {  
  42.     println "False"  
  43. }  
  44. s += "hello"  
  45. if (s) {  
  46.     println "True"  
  47. else {  
  48.     println "False"  
  49. }  
  50. println ""  
  51.   
  52.   
  53. // 集合为空时,表示False  
  54. ArrayList array = new ArrayList()  
  55. if (array) {  
  56.     println "True"  
  57. else {  
  58.     println "False"  
  59. }  
  60. array.add(100)  
  61. if (array) {  
  62.     println "True"  
  63. else {  
  64.     println "False"  
  65. }  
  66. println ""  
  67.   
  68.   
  69. // groovy中switch选择分支的新规定  
  70.   
  71. // switch对字符串类型的支持  
  72.   
  73. print "Please input your words: "  
  74. s = new BufferedReader(new InputStreamReader(System.in)).readLine()  
  75.   
  76. switch (s) {  
  77. case "how are you":  
  78.     println "fine, thank you"  
  79.     break;  
  80. case "how do you do":  
  81.     println "how do you do too"  
  82.     break;  
  83. default:  
  84.     println "nice to meet you"  
  85. }  
  86.   
  87.   
  88. // switch对集合和范围的支持  
  89. n = new Random().nextInt(101)  
  90. print "you got ${n} point, "  
  91. switch (n) {  
  92. case [9899100]:     // n为98, 99, 100这三个数字时  
  93.     println "very good!!"  
  94.     break;  
  95. case 90 .. 97:          // n为90-97之间时  
  96.     println "nice job!!"  
  97.     break;  
  98. case 70 .. 89:          // n为70-89之间时  
  99.     println "good"  
  100.     break;  
  101. case 60 .. 79:          // n为60-79之间时  
  102.     println "can be better"  
  103.     break;  
  104. case {it > 0 && it < 60}: // n比0大且比60小时  
  105.     println "too bad"  
  106.     break;  
  107. case 0:                 // n为0时  
  108.     println "nothing to say"  
  109.     break;  
  110. }  
       首先,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这下改的彻底,该有的全都有了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值