groovy都已经2.4.*版本了,好多新特性,对于其他语言不算新了,积累的语法糖其实都是1.8以后都有的
// no class declareation -> subclass of Script package com.innohub.syntax // 输出太多,这个作为一块开始的标示 String hr = (1..10).collect{'***'}.join(' ') def pp = {String str, obj -> println str.padRight(40, ' ') + obj } pp 'My Class', this.class.name pp 'I am a Script object', this in Script // *** string/gstring println hr // 调用命令行 def process = "cmd /c dir".execute() pp 'dir output', process.text pp '1+1 = ?', '${1+1}' pp '1+1 = ?', "${1+1}" // 这里写sql之类的完爆StringBuffer吧,groovy编译后用StringBuilder优化 pp '1+1 = ?', ''' ${1+1} ''' pp '1+1 = ?', """ ${1+1} """ // *** pattern println hr // 难道所有的语言不都应该这么写正则自变量么? def pat = /^(\d+)$/ pp 'I am', pat.class.name def patCompiled = ~/\d/ pp 'And you are', patCompiled.class.name pp 'is 1234 match ? ', '1234' ==~ pat // 需要中间变量 def mat = '1234' =~ pat pp 'how 1234 match', mat[0][1] // *** list/map/set println hr // 运算符重载 def ll = [] pp 'I am', ll.class.name ll << 1 ll << 2 ll << 3 pp 'My length is', ll.size() def set = [] as HashSet pp 'I am', set.class.name set << 1 set << 2 set << 2 pp 'My length is', set.size() def map = [:] // as HashMap or HashMap map = [:] map.key1 = 'val1' pp 'R u a LinkedHashMap?', map instanceof LinkedHashMap // 一堆语法糖 // 不完整的切片 pp 'Some of me', ll[1..-2] pp 'I have 2', 2 in set // 和instanceof一样 class Parent implements Comparable{ int money // 重载 def Parent plus(Parent another){ new Parent(money: this.money + another.money) } def int compareTo(obj){ if(obj in Parent) this.money - obj.money 0 } } class Child extends Parent { } def p1 = new Parent(money: 100) def p2 = new Parent(money: 200) pp 'My parent is richer', p1 < p2 def p3 = p1 + p2 pp 'Let us marry, our money will be', p3.money def child = new Child() pp 'My son', child in Child pp 'My son like me', child in Parent // each every any collect grep findAll find eg. def listOfStudent = [[name: 'kerry'], [name: 'tom']] pp 'your names?', listOfStudent*.name.join(',') def calSum = {int i, int j, int k -> i + j + k } pp 'let us do math', calSum(*ll) // 哎,费脑筋啊 def listFromRange = [*(1..20)] pp 'another', listFromRange.size() // *** io println hr // 又一堆语法糖 // eg. new File('苍井空.av').newOutputStream() << new Url(url).bytes def f = new File('MakeYouPleasure.groovy.output') f.text = 'xxx' f.newOutputStream() << 'yyy' pp 'file content', f.text.size() f.withPrintWriter{w -> w.println 'zzz' } pp 'file line number', f.readLines().size() // *** == println hr pp 'oh aa == aa of cause', 'aa' == "aa" String num = 'aa' pp 'again?', 'aa' == "${num}" pp 'number is number, string is string', 0 == '0' // 这里需要(),或要有中间变量 pp 'list match!', [1, 1] == [1, 1] pp 'map match!', ['a':'1'] == ['a':'1'] // 这里用is进行引用比较 pp 'two lists', [1, 1].is([1, 1]) // *** if println hr pp "'' is", !'' pp "'1' is", !'1' pp "[] is", ![] pp "[1] is", ![1] pp "[:] is", ![:] pp "[1:1] is", ![1:1] pp "0 is", !0 pp "1 is", !1 // *** null if println hr def one = null pp 'null name is null', one?.name one = [name: 'kerry'] pp 'my name is', one?.name // *** as/closure println hr pp '1 is a integer, yes', '1' as int // refer asType def list4as = [2, 3] def strs = list4as as String[] // or String[] strs = list4as pp 'list can be array', strs class User { int age boolean isOld(){ age > 50 } } interface Operator { def doSth() } // get/set方法省略不用写,造数据也简单 def user = [age: 51] as User pp 'map can be object, is it old?', user.isOld() // 接口也一样,但是都是不要类型和参数 def myOperator = [doSth: { 10 }] as Operator pp 'closure can be a method, do sth!', myOperator.doSth() // Closure是一个类实例,当时一等公民 def doSth = myOperator.&doSth pp 'do again', doSth() // 所以可以付给其他对象,这里很像js里的prototype吧 Parent.metaClass.hello = doSth pp 'do again, but why u?', child.hello() Parent.metaClass.hi = {String name, int age -> // 变老了 name + ((age ?: 0) + delegate.hello()) } pp 'how old?', child.hi('son', 5) // *** assert println hr assert 1 == 1 // *** ant builder println hr def ant = new AntBuilder() // 这就是语法变种,省略了括号,闭包一般都是最后一个参数 // 看gradle的文件时候,别以为那是配置文件,那个也是groovy。。。 ant.echo message: 'hi' ant.copy todir: '/', { fileset dir: './', { include name: 'Make*.groovy' } } // 当然ant所有的功能这里都有,refer gygy.groovy // SwingBuider/MarkupBuilder略 // *** xml println hr def parser = new XmlParser() def root = parser.parseText(''' <dept name="one"> <student name="1" /> <student name="2" /> </dept> ''' ) root.student.each{ pp 'student name', it.@name } // 还有grape,不过现在都是gradle了 // 还有Sql组件 // 其实上面都是语法糖,面向metaClass的都还没有,这个才是这个语言最核心的设计了,大家多看些例子
相关推荐
Groovy的语法非常接近Java,但它更为简洁,减少了大量的模板代码,使得开发更为高效。 在Groovy中,基本语法包括变量、属性、方法和闭包的定义,控制结构如if-else、for循环、while循环、switch语句,以及类和对象...
Gradle文件配置及groovy语法介绍
Groovy 基础语法 Groovy 是一种基于 Java 平台的高级编程语言,它融合了 Ruby、Python 和 Smalltalk 的一些最有用的功能,同时保留了基于 Java 语言的核心语法。Groovy 提供了更简单的替代语言,且几乎不需要学习...
《EditPlus3.12 540 SN及Groovy语法文件详解》 在IT行业中,高效的代码编辑器是开发者的重要工具,EditPlus便是其中的一款经典之作。本文将深入探讨EditPlus 3.12 540版本的序列号(SN)问题以及与Groovy语言相关的...
Groovy是一种动态、灵活的编程语言,它与Java高度兼容,并且在许多方面提供了更简洁的语法。在本文中,我们将深入探讨Groovy的高级语法,特别是与JSON和XML操作相关的部分。 首先,我们来看看Groovy如何处理JSON...
Groovy是一种基于Java平台的动态、灵活的编程语言,它扩展了Java的语法,提供了简洁、易读的代码风格,同时保持与Java的完全互操作性。本教程将深入探讨Groovy中的注释机制,这对于理解和维护代码至关重要。 在...
Groovy语法借鉴了多种语言的特性,如Python、Ruby和Java,这使得Java开发人员能够轻松上手。Gradle则是一种强大的构建自动化工具,广泛用于Java、Android以及其他JVM语言的项目,它允许通过Groovy或Kotlin DSL(领域...
### Groovy语法系列教程之字符串(三) #### Groovy语言简介 Groovy是基于Java平台的一种敏捷开发语言,它具有动态语言的特性,同时又能与Java无缝集成。Groovy的设计哲学是让程序员能够用更少的代码做更多的事情,...
Groovy是基于Java平台的动态语言,它采用了很多Java的语法元素,但也进行了一定的改进和增强。本篇教程是关于Groovy编程语言中布尔(Boolean)类型的详细讲解,其中涉及到布尔类型的定义、使用以及Groovy对于布尔值...
标题提到的"editplus显示groovy的语法(语法高亮)",意味着我们需要为EditPlus添加Groovy语言的语法高亮文件,以便在编辑Groovy代码时获得更好的可读性和视觉体验。语法高亮能够帮助开发者更快地识别代码中的关键元素...
Groovy语言是基于Java平台的一种敏捷开发语言,它是对Java语法的一种扩展和简化,目的是提供一种更加灵活和简洁的编程方式。本教程系列主要介绍Groovy编程语言的语法特点,本篇将针对数字相关的语法进行详细说明。 ...
Groovy 是一种基于 Java 语言的脚本语言,运行在 JVM 中,语法与 Java 相似,但抛弃了 Java 的一些烦琐的语法规则,提供了更加简洁和灵活的编程体验。 Groovy 的特点 1. 简洁的语法:Groovy 语法简洁,减少了代码...
Groovy的语法设计使得Java开发者能轻松过渡,它允许省略一些Java中的冗余元素,如分号和类型声明。 在Groovy中,你可以直接编写简单的脚本,无需定义完整的类结构。例如,Java中声明一个String变量需要`String ...
Groovy 语言的 Antlrv4 语法。 Google Summer of Code 项目。 我想用 Antlr v4 术语重写 Groovy 的语法并编写一个解析器,它使用生成的一个构造 Groovy 的抽象语法树。 作为这项工作的一部分,我计划改进 Groovy ...
Groovy 高级语法 1 本文将详细介绍 Groovy 高级语法 1,包括 JSON 操作、XML 文件操作等。 一、JSON 操作 Groovy 提供了两个工具类来处理 JSON 数据:JsonSlurper 和 JsonOutput。JsonSlurper 用于将 JSON 数据...
Groovy是一种基于Java平台的动态编程语言,它与Java语法高度兼容,但提供了更简洁、灵活的语法,使得开发过程更为高效。Groovy是许多Java开发者选择用来编写脚本、构建工具、自动化任务以及创建富有表现力的代码的...