Groovy简介

1.Groovy是什么?

Groovy...

  • 是一种用于Java虚拟机的灵活动态语言
  • 基于Java的优势,但受Python、Ruby和Smalltalk等语言的启发,它还具有其他强大功能
  • 使Java开发人员可以使用几乎零学习曲线的现代编程功能
  • 提供静态类型检查和静态编译代码的能力,以提高健壮性和性能
  • 支持特定于域的语言和其他紧凑语法,因此您的代码易于阅读和维护
  • 凭借强大的处理原语、面向对象能力和Ant DSL,编写shell和构建脚本变得非常容易
  • 通过在开发web、GUI、数据库或控制台应用程序时减少脚手架代码,提高开发人员的工作效率
  • 通过支持单元测试和开箱即用模拟简化测试
  • 与所有现有Java类和库无缝集成
  • 直接编译为Java字节码,因此您可以在任何可以使用Java的地方使用它

2. 语法

2.1注释

单行注释

单行注释以 //开头,可以在行中的任何位置找到。后面的字符,直到行尾,都被视为注释的一部分。

// a standalone single line comment
println "hello" // a comment till the end of the line

多行注释

多行注释以/*开头,可以在行中的任何位置找到。后面的字符将被视为注释的一部分,包括新行字符,直到第一个关闭注释*/为止。因此,多行注释可以放在语句的末尾,甚至可以放在语句中。

/* a standalone multiline comment
   spanning two lines */
println "hello" /* a multiline comment starting
                   at the end of a statement */
println 1 /* one */ + 2 /* two */

Groovydoc comment

与多行注释类似,Groovydoc 注释是多行的,但以/**开头和*/结尾。第一个 Groovydoc 注释行之后的行可以选择以星号开头。这些评论与以下方面相关联:

  • 类型定义(类、接口、枚举、注释),

  • 字段和属性定义

  • 方法定义

尽管编译器不会抱怨 Groovydoc 注释未与上述语言元素相关联,但您应该在这些构造前面附加注释。

/**
 * A Class description
 */
class Person {
    /** the name of the person */
    String name

    /**
     * Creates a greeting method for a certain person.
     *
     * @param otherPerson the person to greet
     * @return a greeting message
     */
    String greet(String otherPerson) {
       "Hello ${otherPerson}"
    }
}

Groovydoc遵循与Java自己的Javadoc相同的约定。因此,您将能够使用与Javadoc相同的标签。


此外,Groovy 从 3.0.0 开始就支持 Runtime Groovydoc,即 Groovydoc 可以在运行时保留。

运行时 Groovydoc 在默认情况下处于禁用状态。可以通过添加JVM选项来启用它-Dgroovy.attach.runtime.groovydoc=true
运行时 Groovydoc 以/**@开头,并以*/结尾,例如:

/**@
 * Some class groovydoc for Foo
 */
class Foo {
    /**@
     * Some method groovydoc for bar
     */
    void bar() {
    }
}

assert Foo.class.groovydoc.content.contains('Some class groovydoc for Foo') 
assert Foo.class.getMethod('bar', new Class[0]).groovydoc.content.contains('Some method groovydoc for bar') 

Shebang line
除了单行注释之外,还有一个特殊的行注释,通常称为 UNIX 系统可以理解的 shebang 行,它允许直接从命令行运行脚本,前提是您已经安装了 Groovy 发行版并配置了groovy的环境变量

#!/usr/bin/env groovy
println "Hello from the shebang line"

#该字符必须是文件的第一个字符。任何缩进都会导致编译错误。


2.2 关键字

Groovy 具有以下保留关键字:
表 1. 保留关键字

abstract assert break case
catch class const continue
def default do else
enum extends final finally
for goto if implements
import intanceof interface native
new none non-sealed package
public protected private return
static strictfp super switch
synchronized this threadsafe throw
throws transient try while

其中, constgotostrictfpthreadsafe当前未在使用中
保留关键字通常不能用于变量、字段和方法名称。

一个技巧允许通过在引号中将名称括起来来定义与关键字同名的方法,如以下示例所示:


// reserved keywords can be used for method names if quoted
def "abstract"() { true }
// when calling such methods, the name must be qualified using "this."
this.abstract()


使用此类名称可能会造成混淆,通常最好避免使用。该技巧主要用于启用某些 Java 集成场景和某些 DSL场景,在这些场景中,具有与关键字同名的“动词”和“名词”可能是可取的。

此外,Groovy 还具有以下上下文关键字:

表 2. 上下文关键字

as in permits record
sealed trait var yields

这些单词只是某些上下文中的关键字,在某些地方可以更自由地使用,特别是对于变量,字段和方法名称。

这种额外的宽容允许使用在早期版本的Groovy中不是关键字的方法或变量名称,或者在Java中不是关键字。示例如下所示:

// contextual keywords can be used for field and variable names
def as = true
assert as

// contextual keywords can be used for method names
def in() { true }
// when calling such methods, the name only needs to be qualified using "this." in scenarios which would be ambiguous
this.in()
熟悉这些上下文关键字的时髦程序员可能仍然希望避免使用这些名称,除非有充分的理由使用这样的名称。

对保留关键字的限制也适用于基元类型、布尔文本和空文本:

表3:其他保留字

null true false boolean
char byte short int
long float double
虽然不建议这样做,但可以使用与保留关键字相同的技巧:

def "null"() { true }  // not recommended; potentially confusing
assert this.null()     // must be qualified

使用此类单词作为方法名称可能会造成混淆,通常最好避免,但是,对于某些类型的DSL可能很有用。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容