《groovy入门经典》读书笔记

《groovy入门经典》读书笔记,第1张

概述一本不错的groovy编程入门书籍, 基本上涵盖了groovy的方方面面, 整本书采用教材的方式(知识点讲解+练习), 因地对一个java开发人员来说很容易读懂, 所以中文版署名为groovy入门经典. groovy大部分兼容java jdk, 因此对于java开发人员来说, 就需要重点掌握groovy与java不同. 脚本语言应该应用如下目的: 连接已有组件 处理经常变化的多种类型的实体 具有图



一本不错的groovy编程入门书籍,基本上涵盖了groovy的方方面面,整本书采用教材的方式(知识点讲解+练习),因地对一个java开发人员来说很容易读懂,所以中文版署名为groovy入门经典. groovy大部分兼容java jdk,因此对于java开发人员来说,就需要重点掌握groovy与java不同.

脚本语言应该应用如下目的:
连接已有组件
处理经常变化的多种类型的实体
具有图形化用户界面
拥有快速变化的功能
是小型或者中型项目的一部分.

在groovy字符串字面值中,使用单引号封装的字符串的值就是所列出的字符序列本身. 比如: 'My age is ${age}'

groovy支持负数索引,但是顺序是从字符串的末尾开始往前计算,比如"Hello world"[-1] == "d"

一些字符串的基本 *** 作:
"Hello world" - "world" = "Hello" // 减法运算"Hello world".count("o") = 2 // 统计次数"Hello".center(11) // 将字符串居中,不足前后补充空格"Hello".padleft(11,"#") // ######Hello"Hello".replaceAll("[a-z]"){ch->ch.toupperCase()} // HELLO"Hello World".tokenize() // ["Hello","World"]


str1<=>str2 代表 str1.compareto(str2)

在if或while语句中,当groovy *** 作符"=~"作为一个谓词出现时,左边的 *** 作数String将和右边的正则表达式匹配
而在一般的语句中则是定义一个正则表达式,比如 def regex =~ "hello"

对于列表(数组,集合),如果整型索引为负数,这其引用的元素从列表末端开始向前移动.

通过<<运算符(leftShift方法),可以把一个新元素值追加到列表最后.

printf输出中,%s表示按原样输出字符串,%20s在左侧输出字符串,并且宽度为20, %-20s则在左侧输出字符串.

当某个方法的声明包含默认参数时,默认参数仅能出现在非默认参数之后,也就是说,默认参数只能出现在形参列表的最后面.

switch语句中case是一个正则表达式的写法:
switch('1234') {    case ~'[0-9]{5}':        println 'number is 5-digital sequence';        break;    case ~'[0-9]{4}':        println 'number is 4-digital sequence';        break;    default:        println 'other number';        break;}


collect方法将遍历某个集合,并使用闭包中的变换方法,将集合中的每个元素转换成一个新值.
any方法将遍历检查集合中的每一个元素,以确认: 对于每一个元素来说,某个布尔断言是否合法,该断言由闭包提供.
every方法则用来检查:对集合的所有元素是否,某个断言(其返回值为true或false的一个闭包)是否合法.如果合法则返回true,否则返回false
inject方法用来遍历集合,首先将需要传递的值与集合元素传递给闭包,此时其传递的值将作为处理结果,然后再和每一个集合元素一起传给闭包,以此类推.
例如:println ([2,3,4,5].inject( 1) {pre,element->pre*element; }) // 120
当一个类包含一个用户自定义的构造器之后,程序并不会自动生成默认的构造器. 这个和java一致

单元测试就是使用程序员的经验来发现和纠正代码中可能存在的错误.

groovy中浮点数字默认是BigDecimal的实例

正则表达式:
def regex = "([0-9]{3})-([0-9]{2})-([0-9]{4})"def str = "123-45-6789"def matcher = str =~ regexmatcher.matches()println "${matcher[0]}" // [123-45-6789,123,45,6789]println "${matcher[0][0]}" // 123-45-6789println "${matcher[0][1]}" // 123


groovy中默认的列表类型对应的是java中的ArrayList,如果要制定为其他的类型,可以这样写:
def numbers = [] as linkedListnumbers.addAll([1,2,3])println "numbers:${numbers.getClass().getname()}" // java.util.linkedList


as子句只能用于空列表,如果这样用:
def numbers= [1,3] as linkedList;

将抛出异常,这是因为我们试图把一个ArrayList强制转换为linkedList
当某个方法需要使用数组值作为它的实参时,使用as子句就非常有效.比如这样写:
def names = ["Ken","John"]def someMethod(String[] args){...}someMethod(names as String[])


格式化输出
引用 %[index$][flags][wIDth][.precision]conversion
这里的index是可选的,是一个无符号整数,用来指示参数在参数列表中的位置,第一个参数用1$引用,第二个参数用2$引用,以此类推
flags是一组用来更改格式输出的字符
wIDth非负十进制整型值,用来指定输出字符的最小宽度.
precision是一个非负十进制整型值,用来限制字符的个数

groovy并不支持闭包定义中引用自己,但是将闭包作为Closure的一个对象时,则在闭包体可以使用this关键字来引用自己.比如这样写(我在1.7.3版本中这样写执行报错):
def f = {n->    return (n==0) ? 1 : n * this.call(n-1);}


customers[customNumber].accounts.each{number,account -> println "${account}"}

采用这样的导航方式的一个危险是,当遍历到一个null值时,程序会抛出NullPointerException,为避免这种情况,可以使用"?." *** 作符提供的安全导航模式:
customers[customNumber]?.accounts.each{number,account -> println "${account}"}
总结

以上是内存溢出为你收集整理的《groovy入门经典》读书笔记全部内容,希望文章能够帮你解决《groovy入门经典》读书笔记所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1270135.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存