2013-06-30 2 views
0

저는 멋있는 초보자이기 때문에 여기에 나와 함께 있습니다. 그루비의 능력이 적고 깨끗한 코드를 작성하는 것을 좋아하지만, 이러한 여러 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

URL을 직접 작성하는 대신 URI를 사용하는 것을 고려해야합니다 ... 인코딩과 같은 모든 성가신 것들을 취할 것입니다. 그리고 생성자는 "null-resistant"입니다. – 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 도움에 큰 감사드립니다. –

관련 문제