日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Groovy的基础语法

發布時間:2025/3/16 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Groovy的基础语法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Groovy的基礎語法

Groovy 的語法融合了 Ruby、Python 和 Smalltalk 的一些最有用的功能,同時保留了基于 Java 語言的核心語法。對于Java 開發人員,Groovy 提供了更簡單的替代語言,且幾乎不需要學習時間。

語句

Groovy的語句和Java類似,但是有一些特殊的地方。例如語句的分號是可選的。如果每行一個語句,就可以省略分號;如果一行上有多個語句,則需要用分號來分隔。

x = [1, 2, 3] println x y = 5; x = y+ 7 println x assert x == 12

另外return關鍵字在方法的最后是可選的;同樣,返回類型也是可選(缺省是Object)。

動態類型

像其他Script一樣,Groovy 不需要顯式聲明類型。在 Groovy 中,一個對象的類型是在運行時動態發現的,這極大地減少了要編寫的代碼數量。在Groovy中,類型對于值(varibles)、屬性(properties)、方法(method)和閉包(closure)參數、返回值都是可有可無的,只有在給定值的時候,才會決定它的類型,(當然聲明了類型的除外)。例如:

//Groovy 動態類型 myStr = "Hello World"

由于使用了動態類型,不需要繼承就可以得到多態的全部功能:

class Song{ @Property length @Property name }

class Book{ def public name def public author }

def doSomething(thing){ println "going to do something with a thing named = " + thing.name }

這里定義了兩個Groovy 類,Song 和 Book。這兩個類都包含一個 name 屬性。函數 doSomething,它以一個 thing 為參數,并試圖打印這個對象的 name 屬性,但doSomething 函數沒有定義其輸入參數的類型,所以只要對象包含一個 name 屬性,那么它就可以工作。可見, Song 和 Book 的實例都可以作為 doSomething 的輸入參數。

mySong = newSong(length:90, name:"Burning Down the House")

myBook = newBook(name:"One Duck Stuck", author:"Phyllis Root")

doSomething(mySong)//prints Burning Down the House

doSomething(myBook)//prints One Duck Stuck

defdoSth=this.&doSomething

doSth(mySong)

doSth(myBook)

在例子的最后,我們還創建了doSomething的一個函數指針 doSth,最后的執行結果與調用doSoemthing是一樣的。

值得注意的是:與Groovy Beta不同,在使用新的JSR Groovy類時,類里面的所有的變量都必須加上 def 關鍵字或者 private、protected 或 public 這樣的修飾符。當然,也可以用 @Property 關鍵字聲明成員變量。在Script中則不必。

字符串

Groovy中的字符串允許使用雙引號和單引號。

當使用雙引號時,可以在字符串內嵌入一些運算式,Groovy允許您使用 與 bash 類似的 ${expression}語法進行替換。可以在字符串中包含任意的Groovy表達式。

name="James"

println"My name is ${name},'00${6+1}'" //prints My name is James,'007'

Groovy還支持"uXXXX"引用(其中X是16進制數),用來表示特殊字符,例如 "u0040" 與"@"字符相同。

大塊文本

如果有一大塊文本(例如 HTML 和 XML)不想編碼,你可以使用Here-docs. here-docs 是創建格式化字符串的一種便利機制。它需要類似 Python 的三重引號(""")開頭,并以三重引號結尾。

name ="James"

text ="""

hello

there${name} how are you today?

"""

assert text!= null

println(text)

在Groovy-JSR中,不再支持下面這種多行字符串,個人覺得似乎與Here-docs功能重疊:

foo ="hello

?????????? there

????????????? how are things?"

println(foo)

對字符串的操作

1.??? contains 字符串中是否包含子字符串,'groovy'.contains('oo')將返回true;

2.??? count 返回字符串中子字符串出現的次數,'groooovy'.count('oo')將返回3.

3.??? tokenize 根據分隔符將字符串分解成子串,'apple^banana^grap'.tokenize('^')返回['apple','banana','grape']。

4.??? 減操作'groovy'-'oo',結果是'grvy'。

5.??? 乘操作 'oo'*3,結果是'oooooo'。

Groovy主要結構

接下來將展示Groovy的一些結構,包邏輯分支,類、閉包等等。

邏輯分支

if-else語句

Groovy提供Java相同的if-else語句。

x = false

y = false

if ( !x ) {

??? x = true

}

assert x ==true

if ( x ) {

??? x = false

} else{

??? y = true

}

assert x ==y

Groovy也支持三元操作符。

y = 5

x = (y >1) ? "worked" : "failed"

assert x =="worked"

switch語句

Groovy的switch語句兼容Java代碼,但是更靈活,Groovy的switch語句能夠處理各種類型的switch值,可以做各種類型的匹配:

1.??? case值為類名,匹配switch值為類實例

2.??? case值為正則表達式,匹配switch值的字符串匹配該正則表達式

3.??? case值為集合,匹配switch值包含在集合中,包括ranges

除了上面的,case值與switch值相等才匹配。

x = 1.23

result =""

switch ( x ){

??? case "foo":

?????? result = "found foo"

??????? // lets fall through

??? case "bar":

??????? result += "bar"

??? case [4, 5, 6, 'inList']:

??????? result = "list"

??????? break

??? case 12..30:

??????? result = "range"

??????? break

??? case Integer:

??????? result = "integer"

??????? break

??? case Number:

??????? result = "number"

??????? break

??? default:

??????? result = "default"

}

assertresult == "number"

Switch語句的工作原理:switch語句在做case值匹配時,會調用isCase(switchValue)方法,Groovy提供了各種類型,如類,正則表達式、集合等等的重載。可以創建自定義的匹配類,增加isCase(switchValue)方法來提供自定義的匹配類型。

循環

while和do 循環

Groovy支持Java相同的while循環,但目前暫不支持do循環

x = 0

y = 5

while ( y--> 0 ){???

x++

}

assert x ==5

for循環

Groovy的for循環更簡單,而且能夠和各種類型的數組、集合、Map、范圍等一起工作,我們稍候會詳細介紹這些內容。

// iterateover a range

x = 0

for ( i in0..9 ) {

??? x += i

}

assert x ==45

// iterateover a list

x = 0

for ( i in[0, 1, 2, 3, 4] ) {

?? x += i

}

assert x ==10

// iterateover an array

array =(0..4).toArray()

x = 0

for ( i inarray ) {

??? x += i

}

assert x ==10

// iterateover a map

map =['abc':1, 'def':2, 'xyz':3]

x = 0

for ( e inmap ) {

??? x += e.value

}

assert x ==6

// iterateover values in a map

x = 0

for ( v inmap.values() )

{

??? x += v

}

assert x ==6

// iterateover the characters in a string

text ="abc"

list = []

for (c intext) {

??? list.add(c)

}

assert list== ["a", "b", "c"]

運行Groovy腳本

你可以象使用Perl一樣編寫Groovy腳本,不需要class,不需要Main入口點,也不需要聲明變量;此外,你還可以用def語句來定義自己的函數,并在腳本中使用它。

像許多腳本語言一樣,Groovy 是 在運行時解釋的,無編譯的代碼在構建-運行周期中可以提供很多好處。運行時編譯使 Groovy 成為快速原型設計、構建不同的實用程序和測試框架的理想平臺。通過以下代碼可以很簡單的運行Groovy.

groovyHelloWorld.groovy

除了利用解釋器來運行Groovy腳本外,Groovy 提供了兩種不同的解釋器Shell,使所有有效的 Groovy 表達式可以交互地執行:

1.??? 運行groovysh啟動命令Shell,可以輸入Groovy語句直接執行

2.??? 運行groovyConsole啟動Swing方式的Groovy控制臺,這是一個簡單的Groovy編輯器

Groovy 腳本實際上是字節碼級別的 Java 類。因此,還可以用 groovyc 編譯 Groovy 腳本。可以通過命令行或者 Ant 使用 groovyc 以生成腳本的類文件。這些類可以用普通 java 命令運行,只要 classpath 包括 groovy.jar和asm.jar。(龍二少爺)

Posted at 09:09上午三月 03, 2006by 龍二少爺 in Groovy ?|? 迴響[0]

星期二一月 24, 2006

Groovy 前言

前言

Groovy 是基于 JRE 的腳本語言( Script ),和Perl,Python等等腳本語言一樣,它能以快速簡潔的方式來完成一些工作:如訪問數據庫,編寫單元測試用例(Unit Test Case),快速實現產品原型等等。

Groovy 是由JamesStrachan 和 BobMcWhirter 這兩位天才發明的,(JSR 241 2004 年 3 月)。Groovy 完全以Java API為基礎,使用了Java開發人員最熟悉的功能和庫。Groovy 的語法近似Java,并吸收了 Ruby 的一些特點,因此 Groovy 在某些場合可以扮演一種 “咖啡伴侶”的角色。

那么Groovy 和 Java 相比,有什么變化呢? Groovy 通過以下方式提供了一種敏捷的開發方式:

??????不用編譯。

??????允許動態類型。

??????合成結構容易。 其腳本可以在普通 Java 應用程序中使用。

??????提供一個 shell 解析器。

這些特性使Groovy 成為一種特別容易學習和使用的語言. 我們先借用IBM Groovy教程中的例子,下面的代碼利用了Freemarker模板引擎來創建一個Template對象,然后將內容打印到標準輸出。例(1)是Java代碼,例(2)是Groovy代碼。可以看到二者非常的類似。

<code>
//簡單的TemplateReader Java 類
import java.io.File;
import java.io.IOException;
import freemarker.template.Configuration;
import freemarker.template.Template;
public class TemplateReader {?
???public static void main(String[] args){?
???????try{?
???????????Configurationcfg = Configuration.getDefaultConfiguration();
??????????cfg.setDirectoryForTemplateLoading(newFile("C:\\dev\\projects\\http-tester\\src\\conf"));
?????????? Template temp =cfg.getTemplate("vendor-request.tmpl");?
???????????System.out.println(temp.toString());
?????? } catch(IOException e){
??????????e.printStackTrace();
???????}?
???}
}
</code>

和例2 中的 Groovy 作為對比.

<pre><code>
//用 Groovy 編寫的更簡單的 TemplateReader
//語法目前基于Groovy 1.0-JSR3
import freemarker.template.Configuration as tconf
import java.io.File cfg = tconf.getDefaultConfiguration()
cfg.setDirectoryForTemplateLoading( newFile("C:\\dev\\projects\\http-tester\\src\\conf"))
temp = cfg.getTemplate("vendor-request.tmpl")
println temp.toString()
</code></pre>

Groovy顯然精簡得多:

??????Groovy 代碼只需要更少的import 語句。此外,freemarker.template.Configuration 還使用了別名 tconf。

??????Groovy 允許直接使用類型為Template 的變量 tmpl 而不用聲明其類型。

??????Groovy 不需要class 聲明或者main 方法。

??????Groovy 不關心異常,可以不用導入Java需要的IOException。

對Groovy感興趣嗎?別忘了拜訪它的主頁 http://groovy.codehaus.org/ 并下載最新的Groovy發布包哦。(ray_linn)

本文以Groovy1.0-JSR3為基礎,如果您發現任何章節與當前之JSR沖突或者無法運行之腳本,可以和我聯系: ray_linn@hotmail.com.

Posted at 02:27下午一月 24, 2006by 龍二少爺 in Groovy ?|? 迴響[0]

?

總結

以上是生活随笔為你收集整理的Groovy的基础语法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。