版權聲明:本文為部落客chszs的原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/chszs/article/details/8774785
用Groovy思考 第四章 Groovy特性深入
作者:chszs,轉載需注明。部落格首頁:http://blog.csdn.net/chszs
1. 斷言
Java開發者常常使用JUnit或TestNG做單元測試,是以對斷言是很清楚的。斷言是用于驗證假設的條件是否為真。在Groovy的斷言中,如果假設的條件不為真,那麼就會抛出java.lang.AssertionError異常。使用Groovy表達式來測試假設條件。
比如:
groovy:000> assert 1==2 : "One isn't Two"
ERROR java.lang.AssertionError:
One isn't Two. Expression: (1 == 2)
at groovysh_evaluate.run (groovysh_evaluate:2)
...
Java的斷言也是這麼寫的:
assert 1==2 : "One isn't Two";
可見,Groovy的斷言文法與Java的斷言相同,Groovy的斷言可以省略分号。
斷言的使用技巧:
當你使用斷言時,你應用包含一條消息。此消息可以幫助其他人維護和了解你的代碼,理清你的意圖。
2. 強斷言
Groovy的斷言assert關鍵字僅僅是檢查表達式是否為真。如果為假,斷言僅僅告訴開發者,表達式不成立,以及表達式使用的變量值,除此以外什麼都沒有。如果使用強斷言,斷言的輸出會提供表達式的每一個子表達式的可視化展現。下面我将詳細說明強斷言。
groovy:000> assert 1==1: "One isn't Two"
===> null
groovy:000> assert new File('HelloWorld.txt')==new File('Hello.txt')
ERROR org.codehaus.groovy.runtime.powerassert.PowerAssertionError:
assert new File('HelloWorld.txt')==new File('Hello.txt')
| | |
HelloWorld.txt | Hello.txt
false
斷言可以友善地對代碼進行測試。
3. Strings
Groovy支援兩種字元串:正常的Java字元串和GStrings。
在Groovy中,用單引号或雙引号括起來的字元串是java.lang.String類的一個執行個體,
GStrings是groovy.lang.GString類的一個執行個體,它允許在文本中包含占位符。GStrings并不是String的子類,因為String類是final類型,而且是不能被擴充的。
GString很像普通的字元串,但是他允許在其内使用${..}嵌入變量。如果内嵌的變量隻是占位符,那麼可以省略{}花括号。
Groovy支援一些程式設計語言如Perl或Ruby所謂的字元串插入(String Interpolation)。字元串插入是字元串内的表達式或變量的替代。如果你熟悉Unix Shell程式設計或Ruby、Perl程式設計,那麼你應該很熟悉這一點。
Java不支援字元串插入,你必須手動的進行值連結。
Java的字元串操作例子:
String name = "Jim";
String helloName = "Hello " + name;
System.out.println(helloName);
如果是使用Groovy的GString,那麼可以這樣:
groovy:000> str1 = "Li Sir"
groovy:000> str2 = "Hello "
groovy:000> println "$str2$str1"
Hello Li Sir
可見,正如前面所講,如果内嵌的變量隻是占位符,那麼可以省略{}花括号。
當Groovy看到表達式内的内嵌變量時,Groovy會構造一個org.codehaus.groovy.runtime.GStringImpl來代替java.lang.String。當通路GString時,表達式會被重新計算。
注意,你可以在${}内包含任意有效的Groovy表達式,可以是方法調用或變量名。
4. 單行字元串
單行字元串可以用單引号或雙引号包圍,但是兩者是有差別的。
單引号包圍的表達式,裡面的字元串插值是不會被識别的。雙引号包圍的表達式正好相反。
舉例:
name = "LiSir"
s1 = 'Hello $name'
println s1
輸出:
Hello $name
例子:
s1 = "Hello $name"
Hello LiSir
可見,由雙引号定義的字元串,其内嵌的表達式會被解釋。
5. 多行字元串
Groovy支援字元串跨越多行,多行字元串由三個雙引号或者三個單引号定義。
多行字元串對于建立模闆(如XML模闆)或内嵌的文檔(SQL語句、HTML等)是非常有用的。還有很多用途。比如,可以使用多行字元串和字元串插值建立電子郵件的主體内容。
def name = "Jim"
def multiLineQuote = """
Hello, ${name}
This is a multiline string with double quotes
"""
println multiLineQuote
println multiLineQuote.class.name
def multiLineSingleQuote = '''
This is a multiline string with single quotes
'''
println multiLineSingleQuote
println multiLineSingleQuote.class.name
Hello, Jim
org.codehaus.groovy.runtime.GStringImpl
java.lang.String