2013-06-30 38 views
0

我是一個時髦的新手,所以在這裏忍受着我。我喜歡groovy編寫更少且通常更簡潔的代碼的能力,但我試圖弄清楚是否有更好或更可讀的凝聚這些多個if語句的方法。這是一個相當簡單的代碼片段,但這樣做有一個更好的方法。我是一個新手,所以任何代碼片斷都不勝感激。Groovy - 濃縮多個if語句

if (!textOverlay) { 
    textType = "" 
    if(url != null){ 
    Page getPage = resource.getResourceResolver().getResource(url).adaptTo(Page.class) 
    if (getPage != null) { 
     showLink = showLink + ".html" 
     if (fragment.length() > 0) { 
      url += "#"+fragment; 
     } 
    } 
    }    
} else { 
    //do something else 
} 

在此先感謝您的幫助!

+1

我看不出它是如何更緊湊,仍然可讀的。該代碼有什麼問題?除了它似乎有很多責任(許多變量似乎不相關),我沒有看到任何代碼重複。 –

+1

你應該考慮使用'URI'而不是手動構建URL ......它將採用所有討厭的東西,如編碼等。它的構造函數是「無效的」 – fge

+0

我總是在印象中,我可能是錯誤地認爲有多個嵌套的if語句是不好的做法。感謝提示@fge –

回答

1

這對嵌套沒有幫助,但有幾個地方可以利用Groovy使代碼更加緊湊。我已經添加了一些解釋性意見

if (!textOverlay) { 
    textType = "" 

    // null is considered false, so no need to explicitly check for null 
    if (url) { 

    // getResourceResolver() replaced by resourceResolver 
    // Page and Page.class are the same thing 
    Page getPage = resource.resourceResolver.getResource(url).adaptTo(Page) 

    // Groovy truth 
    if (getPage) { 

     // use String concatenation operator (also works in Java) 
     showLink += ".html" 

     // non-empty strings evaluate to true 
     if (fragment) { 
      // GString instead of string concatenation 
      url += "#$fragment" 
     } 
    } 
    }    
} else { 
    //do something else 
} 
+0

謝謝@Don非常感謝您的幫助 –