Groovy常用语法汇总
基本语法
1.Grovvy的注释分为//和/**/和java的一样.
2.Grovvy语法可以不已分号结尾.
3.单引号,里面的内容严格的对应java中的String,不对$符号进行转义.
def s1 = 'i am a student $'
println s1
i am a student $
4.双引号“ ”的内容中如果有$号的话,会先对表达式先求值.
def age = 100
def s2 = "他已经 $age 岁了"
println(s2)
他已经 100 岁了
5.三个引号中的字符串支持随意的换行.
def s3 = '''
x
y
z
'''
println(s3)
x
y
z
定义变量
Grovvy中支持动态类型,定义变量的时候可以不指定类型,Grovvy中可以使用关键字def.
def a = 1
def b = "我是谁"
def double = 1.0
定义函数
def fun(){
}
fun()
def fun1(def1,def2){
println def1+" &&"+def2
}
fun1(1,2)
String fun2(){
return "返回值"
}
println fun2()
def getSomething(){
"我是谁"
1000
}
println getSomething()
注意:
1.无返回类型的函数定义,必须使用def关键字 ,最后一行代码的执行结果就是本函数的返回值
2.如果指定了函数返回类型,则可不必加def关键字来定义函数
断言assert
断言变量为空
def t1 = null
assert t1
断言变量的长度
def t2 = "ab3"
assert t2.size() >3
注意:
1.如果断言发生,断言后面的代码无法执行
循环For
方式一
for (i=0;i<;i++){
println i
}
方式二
for(i in 0..5){
println i
}
其它
for(i in 0..<){
println ("hello world")
}
循环time
times表示从0开始循环到4结束
4.times {
println it
}
三目运算符
def name = 'd'
def result = name=='d'?'cc':"abc"
println result
捕获异常
try {
5/0
}catch(Exception e){
e.printStackTrace()
}
Switch
age = 36
def rate
switch (age){
case 10..26:
rate = 0.05
break
case 27..36:
rate = 0.06
break
case 37..46:
rate = 0.07
break
default:
throw new IllegalArgumentException()
}
println rate
判断是否为真
Person person
println person?.Data?.name
asType
asType就是数据类型转换
def g1 = '1'
def f1= g1 as int
def f2 = g1.asType(Integer)
println f2
Groovy数据类型
Groovy中的数据类型主要分2种
一个是Java中的基本数据类型。
另外一个是Groovy中的容器类。
最后一个非常重要的是闭包。
Java 基本类型
def boolean b1 = true
println b1
def int b2 = 100
def String b3 = "hello world"
if(b1){
println "hello world"
}
Groovy 容器
List:链表,其底层对应Java中的List接口,一般用ArrayList作为真正的实现类。 Map:键-值表,其底层对应Java中的LinkedHashMap。 Range:范围,它其实是List的一种拓展。
List
def aList = [5,'string',false]
println aList
println aList[0]
println "集合的长度:"+aList.size()
aList[10] = 'sss'
println aList
[5, string, false]
5
集合长度:3
[5, string, false, null, null, null, null, null, null, null, 'sss']
集合长度:11
map
def map = [key1:"value1",key2:"value2",key3:"value3"]
println map
println "map的长度:"+map.size()
println map.keySet()
println map.values()
println map.key1
println map.get("key1")
map.put("key4","value4")
println map.entrySet()
Iterator it = map.iterator()
while(it.hasNext()){
println "遍历map:"+it.next()
}
map.containsKey("key1")
map.containsValue("values1")
map.clear()
Set set = map.keySet()
range
Range 是 Groovy 对 List 的一种拓展.
def range = 1..5
println range
println "长度:"+range.size()
println "迭代器:"+range.iterator()
println "获取标号为1的元素:" +range.get(1)
println "是否包含元素5:"+range.contains(5)
println "最后一个元素:"+range.last()
//println "移除标号为1的元素:"+range.remove(1)
//清空列表
//range.clear()
println "第一个数据:"+range.from
println "最后一个数据:"+range.to
闭包
模板
def xxx = {paramters -> code}
//或者
def xxx = {无参数,纯code}
def fun1 = {
p1 ->
def s = "我是一个闭包,"+ p1
}
println(fun1.call())
println(fun1.call("我是一个参数"))
println fun1("我是参数2")
闭包没定义参数的话,则隐含有一个参数,这个参数名字叫it,和this的作用类似。it代表闭包的参数。
def fun2 = {
it -> "abcd"
}
println fun2.call()
如果在闭包定义时,采用下面这种写法,则表示闭包没有参数!
def fun3 = {
-> "cccc"
}
println fun3.call()
省略圆括号
def list = [1,2,3]
list.each {
println it
}
1
2
3
each函数调用的圆括号不见了!原来,Groovy中,当函数的最后一个参数是闭包的话,可以省略圆括号。比如:
def fun5(int a1,String b1,Closure closure){
closure()
}
fun5(5,"test",{
println "i am in closure"
})
以后这样代码会比较多:
task hello{
doLast{
println("hello world")
}
}
案列1:
//字符串与闭包的结合使用
String str2 = 'the 2 and 4 is 6'
//each
str2.each {
String temp ->println temp
}
//find来查找符合条件的第一个
println str2.find{
String s -> s.isNumber()
}
//findAll
def sList = str2.findAll{
String s1 -> s1.isNumber()
}
println sList
//any
def result = str2.any{
String s -> s.isNumber()
}
println result
//collect
def list2 = str2.collect {
it.toUpperCase()
}
println list2.toListString()
Java属性
public class Person{
def String name;
def int age; String getName() {
return name
} void setName(String name) {
this.name = name
} int getAge() {
return age
} void setAge(int age) {
this.age = age
} @Override
String toString() {
return "Person{"+
"name='"+name+'\''+
",age=" + age+
'}';
}
}
Person person = new Person()
person.setName("Test")
person.setAge(20)
println(person.toString())
Groovy常用语法汇总的更多相关文章
- groovy常用语法及实战
groovy语言简介 一种基于JVM的敏捷开发语言,作为编程语言可编译成java字节码,也可以作为脚本语言解释执行. 结合了Python.Ruby和Smalltalk的许多强大的特性 支持面向对象编程 ...
- Angular学习资料大全和常用语法汇总(让后端程序员轻松上手)
前言: 首先为什么要写这样的一篇文章呢?主要是因为前段时间写过一些关于Angualr的相关实战文章,有些爱学习的小伙伴对这方面比较感兴趣,但是又不知道该怎么入手(因为认识我的大多数小伙伴都是后端的同学 ...
- sql 常用语法汇总
Sql常用语法 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控 ...
- python3+selenium常用语法汇总
Selenium常用语法总结 一.Selenium常用定位语法 1.元素定位 (1)ID定位元素: find_element_by_id(‘’) (2)通过元素的类名称定位元素: find_eleme ...
- Groovy常见语法汇总
一.groovy是什么 简单地说,Groovy 是下一代的java语言,跟java一样,它也运行在 JVM 中. 作为跑在JVM中的另一种语言,groovy语法与 Java 语言的语法很相似.同时,G ...
- 【Linq】常用语法汇总
语言继承查询(Language Integrated Query, LINQ),在C#编程语言中集成了查询语法,可以用相同的语法访问不同的数据源,LINQ提供了不同数据源的抽象层,所以可以使用相同语法 ...
- SQL SERVER常用语法汇总
阅读目录 一.SQL分类 二.基础语句 三.sql技巧 四.(MS SQL Server)SQL语句导入导出大全 回到目录 一.SQL分类 DDL—数据定义语言(CREATE,ALTER,DROP,D ...
- SringBoot整合velocity及常用语法
项目地址:https://github.com/chywx/springboot-velocity 背景 由于公司业务面向的是非洲市场 那边有些国家智能机并未普及,像乌干达地区还是以功能机为主 为了支 ...
- 20145222《信息安全系统设计基础》Linux常用命令汇总
学习Linux时常用命令汇总 通过Ctrl+f键可在该网页搜索到你想要的命令. Linux中命令格式为:command [options] [arguments] //中括号代表是可选的,即有些命令不 ...
随机推荐
- Linux strace命令(转载)
转载:http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html 简介 strace常用来跟踪进程执行时的系统调用和所接收的信号. ...
- java多线程模拟龟兔赛跑
让乌龟和兔子在同一个赛道从1开始跑到100,看看谁更快. public class Racer implements Runnable{ private static String winner;// ...
- DecimalFormat数字格式化用法“0”和“#”的区别
1. 以“0”补位时: 如果数字少了,就会补“0”,小数和整数都会补: 如果数字多了,就切掉,但只切小数的末尾,整数不能切: 同时被切掉的小数位会进行四舍五入处理. 2. 以“#”补位时: 如果数字少 ...
- 题解报告:NYOJ #311完全背包(恰好装满)
描述: 直接说题意,完全背包定义有N种物品和一个容量为V的背包,每种物品都有无限件可用.第i种物品的体积是c,价值是w.求解将哪些物品装入背包可使这些物品的体积总和不超过背包容量,且价值总和最大.本题 ...
- Retinex系列之Frankle-McCann Retinex 分类: Matlab 图像处理 2014-12-01 21:52 538人阅读 评论(2) 收藏
一.Frankle-McCann Retinex Frankle-McCann算法选择一条螺旋结构的路径用于像素间的比较.如下图,算法沿着螺旋路径选取用于比较 像素点,这种路径选择包含了整个图像的全局 ...
- Service官方教程(6)Bound Services主要用来实现通信服务,以及3种实现通信的方案简介。
1.Bound Services A bound service is the server in a client-server interface. A bound service allows ...
- Python的数据类型:list和tuple
今天开始认真的学习python. 1.list类型 list是python的一种数据类型,它是一种有序列表,可以随时添加和删除其中的元素. 1.1 list类型的特征 list类型内的成员类型可以相同 ...
- 【LeetCode】树的遍历
非递归中序遍历: 思路:注释 vector<int> inorderTraversal(TreeNode* root) { vector<int>ret; if(root == ...
- 206 Reverse Linked List 反转链表
反转一个单链表.进阶:链表可以迭代或递归地反转.你能否两个都实现一遍?详见:https://leetcode.com/problems/reverse-linked-list/description/ ...
- R in action读书笔记(10)-第八章:回归-- 异常观测值 改进措施
8.4 异常观测值 8.4.1 离群点 car包也提供了一种离群点的统计检验方法.outlierTest()函数可以求得最大标准化残差绝对值Bonferroni调整后的p值: > library ...