def LIMIT=10 def count=1 println 'start' while(count<=LIMIT){ println "count:${count}" count++ } println 'Done'
注意:固定变量使用大写编写
for语句:
def LIMIT =10; println 'start' for (count in 1..LIMIT){ println "${count}" } println 'done'
循环处理列表:
println 'start' for (count in [11,12,13,14]){ println "${count}" } println 'done'
循环处理映射:
def staff=['ken':21,'john':25,'sally':22] def totalAge=0; for(staffEntry in staff){ totalAge+=staffEntry.value } print "total age is ${totalAge}"
循环处理字符串:
def name='Kenneth' def listofChar=[] for(letter in name){ listofChar << letter } println "listofChar:${listofChar}"
if判断:
def first=12 def second=34 if(first>second){ println "${first}>${second}" }else{ println "${second}>${first}" }
switch:
def n=10 switch (n){ case 1:println 'one' case 2:println 'two' case 3:println 'three' case 10:println 'ten' }
switch和范围:
def score=89 switch (score){ case 70..100: grade='A' break case 60..70: grade='b' break case 50..60: grade='C' break case 40..50: grade='E' break } println "${score}:${grade}"
List和case:
def number=89 switch (number){ case [86,87,88,89]: println 'number is eighty something' break case [66,67,68,69]: println 'number is sixty something' break }
闭包及其调用:
def clos={println 'Hello world'} clos.call()
参数化的闭包:
def clos={param->println "Hello ${param}"} clos.call('Andy')
单个隐参数:
def clos={println "Hello ${it}"} clos.call('Andy')
其中的${it}中的it代表iterator
each方法和闭包:
[1,2,3,4].each {println it} ['ken':21,'jphn':22,'sally':45].each {println it} ['ken':21,'joph':22].each {println "${it.key} maps to :${it.value}"}
条件元素:
[1,2,3,4].each {num->if(num%2==0) println num} ['ken':21,'jphn':22,'sally':45].each {staff->if(staff.value>=25)println staff.key}
any和every:
def anyElement=[11,12,13,14].any{element->element>12} println "${anyElement}" def someElement=[11,12,13,14].every{element->element>12} println "${someElement}"
collect方法:
def list=[1,2,3,4].collect{element->return element*element} println "list:${list}"
collect高级应用:
def doubles={item->2*item} def triples={item->3*item} def map(clos,list){ return list.collect(clos) } println "Doubleing:${map(doubles,[1,2,3,4])}" println "Tripling:${map(triples,[1,2,3,4])}"
Grovvy类:
class Account1 { def number def balance } def acc=new Account1(number:'ACB123',balance:1200) println "Account ${acc.number} has balance ${acc.balance}"
注意:acc.number用了访问Account对象的acc的number属性。
groovy中的getter和setter都是隐含方法。
grovvy类方法实例:
class Account1 { def number def balance def credit(amount){ balance+=amount } def debit(amount){ if(balance>=amount){ balance=amount } } def display(){ println "Account:${number} with balance:${balance}" } } def acc=new Account1(number:'123Abc',balance: 1200) acc.display() acc.credit(200) acc.display() acc.debit(900) acc.debit(700) acc.display()
嵌套类实例
package com.andy.test /** * Created by admin on 16/5/6. */ class Account1 { def number def balance def credit(amount) { balance += amount } def debit(amount) { if (balance >= amount) { balance = amount } } def display() { println "Account:${number} with balance:${balance}" } String toString() { return "Account:${number} with balance:${balance}" } } class Bank{ def openAccount(number,balance){ def acc=new Account1(number:number,balance:balance) accounts[number]=acc } def creditAccount(number ,amount){ def acc=this.findAccount(number) if(acc!=null){ acc.credit(amount) } } def getAccountBalance(number){ def acc=this.findAccount(number) return (acc==null)? null:acc.balance } def getTotalAssets(){ def total=0; accounts.each {number,account->total+=account.balance} return total } def findAccount(number){ def acc=accounts.find{entry->entry.key==number} return (acc==null)?null:acc.value } def name def accounts=[:] } def bk=new Bank(name:'Community') bk.openAccount('123ABC',1200) bk.openAccount('456DEF',1000) bk.openAccount('789GHI',2000) bk.creditAccount('123ABC',300) println "Balance for account 123ABC is :${bk.getAccountBalance('123ABC')}"