2017-02-09 1 views
-4

좋은 프로그래밍 실습에 관한 간단한 질문입니다.자바 프로그래밍을 깨끗이하면 람다를 사용하여 메소드 입력 매개 변수를 생성하는 것이 좋지 않습니까?

성능을 제외하고 성능상의 차이점이 얼마나 될까요? 나는 문제를 지나치게 단순화하여 내 요지를 완전히 파악하고 있지만 완전히 잘못된 것입니까?

public void methodWithInputString(String data) { 
    // do something with data 
} 

public void methodThatCallsTheAbove() { 
    methodWithInputString(

     // lambda with no input and a string as output 
     (() -> { 

      if (this.conditionIsTrue) 
       return "Condition is true"; 
      else 
       return "Condition is false"; 

     }).apply(); 

    ); 
} 

대안은 간단하게 다음과 같습니다

public void methodThatCallsTheAbove() { 
    if (this.conditionIsTrue) 
     methodWithInputString("Condition is true"); 
    else 
     methodWithInputString("Condition is false"); 
} 

나는 두 번째는 명백한/올바른 접근 방식은 이해하지만 첫 번째 하나를 사용하여 상황에 내 코드 청소기는 여전히 무의미한 일이 그 것이다합니다 할 것?

+0

당신이 정의 된 동일한 방법으로 람다를 사용하여 자신을 발견하는 경우, 대신 메서드를 작성 할 수 있습니다. – Moira

+0

물론, 어떤 경우에는 더 깨끗하다고 ​​느껴질 수도 있습니다. 그러나 당신이 준 예제는 매우 나쁩니다. 우선, 컴파일 할 수 없습니다. '? :' – ZhongYu

+0

가독성이 떨어졌습니다. 메서드 이름은 거의 자체적으로 주석 처리됩니다. 빈 람다는 실제 주석이 필요하며 쉽게 확장 할 수 없습니다. – Compass

답변

0

+1 Andy Turner remark. 플러스 : 람다 내부의 객체 속성 참조를 피하십시오.

난 당신이 같은 것 보여 하려는지의 컴파일 가능한 버전을 추측 :

public class Demo { 

    private static final Function<Boolean, String> GET_STRING_DEPENDING_ON_BOOLEAN = flagValue -> "Condition is ".concat(String.valueOf(flagValue)); 

    private boolean conditionIsTrue; 

    public void methodWithInputString(final String data) { 
     // do something with data 
    } 

    public void methodThatCallsTheAbove() { 
     methodWithInputString(GET_STRING_DEPENDING_ON_BOOLEAN.apply(this.conditionIsTrue)); 
    } 

} 

이 일을 (방법 대신 람다를 사용하여)의 유일한 장점은 재사용 할 수있다 이 람다와 뭔가 다른 것을 연결해.

예 :

methodWithInputString(GET_STRING_DEPENDING_ON_BOOLEAN.andThen(data -> data.concat("somethingelse")).apply(this.conditionIsTrue)); 
관련 문제