Groovy에서 명시적인 return 문을 작성하는시기?


21

현재 Groovy / Grails 프로젝트를 진행 중이며 (Globov / Grails) 프로젝트 (내가 처음 인 사람) return는 Groovy 메소드 에서 키워드 를 생략하는 것이 좋은지 궁금합니다 . 내가 아는 한 키워드 즉 가드 절에 대한 키워드를 명시 적으로 삽입해야하므로 다른 곳에서도 사용해야합니까? 내 생각에 추가 return키워드는 가독성을 높입니다. 아니면 그냥 익숙해 져야합니까? 그 주제에 대한 당신의 경험은 무엇입니까?

몇 가지 예 :

def foo(boolean bar) {
    // Not consistent
    if (bar) {
        return positiveBar()
    }
    negativeBar()
}

def foo2() {
    // Special Grails example
    def entitiy = new Entity(foo: 'Foo', bar: 'Bar')
    entity.save flush: true
    // Looks strange to me this way
    entity
}

Perl에서도 비슷한 문제가 있습니다 : 함수는 return명령문이 없을 때 마지막으로 평가 된 표현식을 반환합니다 . 개인적으로 나는 항상 explicit를 사용 return하지만 Groovy를 모른다.
Keith Thompson

2
개인적으로 나는 암시 적으로 완전히 명확 할 return 때만 사용합니다 . toString전형적인 예입니다 : 그것은 한 줄짜리이고 계산 된 값은 분명히 반환 값입니다. 그러나 다시, 나는 그것이 더 큰 공동체가 생각하는 것에 맞는지 알 수 있도록 Groovy를 충분히 프로그래밍하지 않았다.
Joachim Sauer 2018 년

답변:


7

나중에 코드를 와서 업데이트 / 유지할 수있는 사람 (자신 포함)에게 의도를보다 명확하게하기 위해 리턴을 추가 할 것이라고 확신합니다.

그렇지 않으면 입력 오류처럼 보일 수 있습니다.

다른 한 가지는 void를 'void'로 반환 할 것으로 예상되는 함수 / 클로저를 선언하는 것입니다. 다시 한 번 미래의 관리자에게 수행하려는 작업을 명확하게하기 위해.


17

선명도가 왕입니다.

코드를 작성한 후 코드를 읽어야하는 동료 프로그래머에게 가장 명확한 것을 수행하십시오.


8

다음은 return 문 ( Source ) 을 생략하기위한 인수입니다 .

Groovy의 절제된 기능

배경

나는 Groovy와 잠시 동안 일했지만 한 가지 특징에 반대했다 : 마지막 표현의 암시 적 반환. 예를 들면 다음과 같습니다.

def getFoo() {
  def foo = null
  if (something) {
    foo = new Foo()
  }
  foo // no 'return' necessary
}

위의 코드에서, 나는 그것이 더 안전하다고 느끼기 때문에 return을 사용할 것입니다. 나는 Eric의 게시물에 동의하는 경향이 있습니다 (명시 적 반품과 관련하여).

시현

나는 지금 그것을 얻었고, Groovy의 향상된 수집 방법 덕분입니다.

수집 방법을 고려하십시오. 함수를 적용하여 목록을 변환합니다. 의사 코드에서 :

[ a, b, c, d] => [ f(a), f(b), f(c), f(d) ]

그것을 염두에두고, 또 다른 예가 있습니다.

class Composer {
  def name
  // def era, etc
}

def list = [ 'Bach', 'Beethoven', 'Brahms' ]

// the closure returns the new Composer object, as it is the last
// expression evaluated.

def composers = list.collect { item -> new Composer(name : item) }

assert 'Bach' == composers[0].name

아이디어는 단순히 문자열 목록에서 Composer 객체 목록을 작성하는 것입니다. 의견에서 언급했듯이 수집을 위해 전달 된 클로저는 암시적인 리턴을 사용합니다. 한 번에, 나는 그 아이디어를 표현하기 위해 3-4 줄을 썼을 것입니다.

그러나 이제이 코드는 간결하지 않습니다. 정말 우아합니다. 파이썬과 같은 다른 언어를 매우 연상시킵니다.

집으로가는 메시지

훌륭한 Groovy 기능에는 여러 가지가 있습니다. 그러나 '암시 적 수익'이 나열되는 경우는 거의 없습니다. 저는 팬입니다. 다른 기능을 위해 바퀴에 그리스를 바르십시오.

여러 언어로 사용할 수 있다는 것을 알고 있습니다. Groovy에서는 사용하지 않았습니다. 몇 주 안에 나는 그것 없이는 살 수 없을 것으로 의심됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.