`

《groovy入门经典》读书笔记

    博客分类:
  • Book
阅读更多


一本不错的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 =~ regex
matcher.matches()
println "${matcher[0]}" // [123-45-6789, 123, 45, 6789]
println "${matcher[0][0]}" // 123-45-6789
println "${matcher[0][1]}" // 123


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


as子句只能用于空列表, 如果这样用:
def numbers= [1,2,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入门经典.pdf

    GROOVY入门经典GROOVY入门经典GROOVY入门经典GROOVY入门经典

    Groovy入门经典.pdf

    Groovy是一种基于Java平台的动态、灵活的编程语言,它设计的目标是简化开发流程,提高开发效率。...通过阅读《Groovy入门经典》这本书,你可以系统地了解Groovy的基础知识和高级特性,逐步掌握这个强大而有趣的语言。

    Groovy入门经典 中英文版本

    在阅读“Groovy入门经典”的英文版时,不仅可以提升你的Groovy技术,还可以提高英语阅读能力,这对于那些希望在国际化的开发环境中工作的程序员来说尤其重要。同时,中文版则提供了对原版内容的准确理解,避免了语言...

    GROOVY入门经典

    Groovy入门经典一书是Groovy编程语言的入门教材,旨在引导Java开发人员和脚本语言新手掌握Groovy语言的基本知识和高级应用。Groovy作为一种动态脚本语言,与Java有相似的语法结构,但在功能和灵活性上远超过Java。...

    Groovy入门经典

    《Groovy入门经典》奉书内容全面详尽,浅显易懂,易于选择性阅读。可以作为对Groovy语言感兴趣的计算机软件开发人员的参考书。.., Groovy是唯一能够扩展Java平台的脚本语言。Groovy提供类似于Java的语法结构,本地化...

    groovy 经典入门 通俗易懂

    Groovy是一种基于Java平台的动态编程语言,它旨在提高开发者的生产力,同时保持与Java的兼容性。在本文中,我们将深入探讨Groovy的...通过阅读《Groovy经典入门推荐版》PDF,你将能够全面了解这个语言,并迅速上手。

    groovy入门经典,groovyeclipse 插件

    Groovy是一种动态、灵活的编程语言,它是Java平台上的一个扩展,可以无缝集成到Java项目中。...通过阅读《Groovy经典入门》这本书和实践其中的示例,你可以快速掌握Groovy语言并开始利用其强大的功能。

    Groovy入门教程[参照].pdf

    Groovy 入门教程 Groovy 是一种基于 Java 语言的脚本语言,运行在 JVM 中,语法与 Java 相似,但抛弃了 Java 的一些烦琐的语法规则,提供了更加简洁和灵活的编程体验。 Groovy 的特点 1. 简洁的语法:Groovy 语法...

    Groovy_in_Action Groovy经典入门 使用Grails快速开发Web应用

    Groovy_in_Action.pdf Groovy经典入门.pdf 使用Grails快速开发Web应用.pdf 在Eclipse里使用Grails类创建工具.pdf Programming Groovy. Dynamic Productivity for the Java Developer.pdf等一系列groovy资源

    Groovy入门经典脚本语言

    动词优先的语法:Groovy使用类似Ruby的"dot notation"(点操作符)来访问属性和方法,使代码更易于阅读。 集成了Java库:由于它是Java的超集,可以直接访问Java的所有类库和工具,同时也提供了自己的扩展。 表达式...

    经典Groovy入门资料

    ### 经典Groovy入门资料知识点详解 #### 一、Groovy简介与快速入门 **1.1 使用Groovy** Groovy是一种灵活的面向对象编程语言,它与Java有着良好的兼容性,允许开发者以简洁而强大的方式编写代码。对于那些急于...

    Groovy学习笔记 PDF版

    在《Groovy学习笔记》这本书中,你可能会学到如何快速入门Groovy,理解其基本语法,包括变量、控制流、类和对象的创建,以及如何利用Groovy的特性来提高开发效率。此外,书中可能还会涵盖Groovy在实际项目中的应用,...

    Grails-开源框架---使用指南.pdf与Groovy入门经典(中文).pdf(2合一)

    总结,"Grails-开源框架---使用指南.pdf"和"Groovy入门经典(中文).pdf"这两本书将帮助读者深入理解Grails框架和Groovy语言,从而更好地开发基于JVM的现代Web应用程序。通过学习这两本书,开发者可以掌握如何利用...

    Groovy入门教程.doc

    Groovy是一种基于Java虚拟机(JVM)的动态编程语言,它的设计目标是结合静态语言的效率和动态语言的灵活性。Groovy与Java语法相似,但更为简洁,减少了程序员的编码工作量,尤其适合快速开发和脚本编写。 在开发...

    groovy入门经典

    "groovy经典入门"这个压缩包文件很可能是包含一系列教程或者示例代码,帮助初学者逐步掌握Groovy语言。通常,这样的资源可能包括: 1. **基础教程**:介绍Groovy的基本语法、数据类型、控制流等。 2. **实例解析**...

Global site tag (gtag.js) - Google Analytics