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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

groovy–流程控制

發布時間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 groovy–流程控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在本篇文章中,我們將介紹邏輯分支,循環,以及如何從if-else以及try-catch代碼塊中返回值。

if – else
Groovy 支持Java傳統的if-else語法:

def x = false def y = falseif ( !x ) {x = true
}assert x == trueif ( x ) {x = false
} else {y = true
}assert x == y

  Groovy 也支持Java傳統的if-else if -else 語法:

1if?( ... ) {
2...
3}?else?if?(...) {
4...
5}?else?{
6...
7}

三元操作符
Groovy 也支持Java傳統的三元操作符:

1def?y =?5
2def?x = (y >?1) ??"worked"?:?"failed"
3assert?x ==?"worked"

switch
Groovy也支持switch語句,不過和java的switch語句還是有很大的區別的:

1def?x =?1.23
2def?result =?""
3?
4switch?( x ) {
5?case?"foo":
6?result =?"found foo"
7?// lets fall through
8?
9case?"bar":
10?result +=?"bar"
11?
12case?[4,?5,?6,?'inList']:
13?result =?"list"
14?break
15?
16case?12..30:
17?result =?"range"
18?break
19?
20case?Integer:
21?result =?"integer"
22?break
23?
24case?Number:
25?result =?"number"
26?break
27?
28default:
29?result =?"default"
30}
31?
32assert?result ==?"number"

從上面的例子可以看出switch ( x )中的x可以使用任何類型的值,而且下面的匹配值也可以使用任何的類型。

循環
Groovy也支持Java傳統的while循環語法:

1def?x =?0
2def?y =?5
3?
4while?( y-- >?0?) {
5?x++
6}
7?
8assert?x ==?5

for循環
在Groovy中,for循環更加的簡單,而且如果你愿意的話,你也可以在Groovy中使用標準的C/Java的for循環語法。

1for (int?i =?0; i <?5; i++) {
2}
3?
4// iterate over a range
5def?x =?0
6for ( i?in?0..9?) {
7?x += i
8}
9assert?x ==?45
10?
11// iterate over a list
12x =?0
13for ( i?in?[0,?1,?2,?3,?4] ) {
14?x += i
15}
16assert?x ==?10
17?
18// iterate over an array
19array = (0..4).toArray()
20x =?0
21for ( i?in?array ) {
22?x += i
23}
24assert?x ==?10
25?
26// iterate over a map
27def?map = ['abc':1,?'def':2,?'xyz':3]
28x =?0
29for ( e?in?map ) {
30?x += e.value
31}
32assert?x ==?6
33?
34// iterate over values in a map
35x =?0
36for ( v?in?map.values() ) {
37?x += v
38}
39assert?x ==?6
40?
41// iterate over the characters in a string
42def?text =?"abc"
43def?list = []
44for (c?in?text) {
45?list.add(c)
46}
47assert?list == ["a",?"b",?"c"]

閉包(closures)
有時候你也可以使用閉包的each()和eachWithIndex()方法來替換一些for循環代碼。

1def?stringList = [?"java",?"perl",?"python",?"ruby",?"c#",?"cobol",
2?"groovy",?"jython",?"smalltalk",?"prolog",?"m",?"yacc"?];
3?
4def?stringMap = [?"Su"?:?"Sunday",?"Mo"?:?"Monday",?"Tu"?:?"Tuesday",
5?"We"?:?"Wednesday",?"Th"?:?"Thursday",?"Fr"?:?"Friday",
6?"Sa"?:?"Saturday"?];
7?
8stringList.each() {?print?" ${it}"?};?println?"";
9// java perl python ruby c# cobol groovy jython smalltalk prolog m yacc
10?
11stringMap.each() { key, value ->?println?"${key} == ${value}"?};
12// Su == Sunday
13// We == Wednesday
14// Mo == Monday
15// Sa == Saturday
16// Th == Thursday
17// Tu == Tuesday
18// Fr == Friday
19?
20stringList.eachWithIndex() { obj, i ->?println?" ${i}: ${obj}"?};
21// 0: java
22// 1: perl
23// 2: python
24// 3: ruby
25// 4: c#
26// 5: cobol
27// 6: groovy
28// 7: jython
29// 8: smalltalk
30// 9: prolog
31// 10: m
32// 11: yacc
33?
34stringMap.eachWithIndex() { obj, i ->?println?" ${i}: ${obj}"?};
35// 0: Su=Sunday
36// 1: We=Wednesday
37// 2: Mo=Monday
38// 3: Sa=Saturday
39// 4: Th=Thursday
40// 5: Tu=Tuesday
41// 6: Fr=Friday

從if-else和try-catch代碼塊中返回值
從 Groovy 1.6開始,在方法或者閉包中的最后一行表達式,可以從if/else和try/catch/finally代碼塊中返回值,而且并不需要明確的使用return關鍵字返回值,只需要他們是代碼塊的最后一個表達式就行。

下面的例子就說明了這個情況,在下面的代碼塊中雖然沒有顯示的調用return關鍵字,但是仍然會返回1:

1def?method() {
2?if?(true)?1?else?0
3}
4?
5assert?method() ==?1

對于 try/catch/finally blocks代碼塊來說,如果try代碼塊中沒有拋出異常的話,那么try代碼塊的最后一行的表達式將會被返回,如果try的代碼塊拋出異常并且被catch住的時候,那么catch代碼塊中的最后一個表達式的值將會被返回。

但是請注意:finally代碼塊不會返回值的。

1def?method(bool) {
2?try?{
3?if?(bool)?throw?new?Exception("foo")
4?1
5?}?catch(e) {
6?2
7?}?finally?{
8?3
9?}
10}
11?
12assert?method(false) ==?1
13assert?method(true) ==?2

轉載于:https://www.cnblogs.com/rollenholt/p/3349046.html

總結

以上是生活随笔為你收集整理的groovy–流程控制的全部內容,希望文章能夠幫你解決所遇到的問題。

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