문제

그래서 나는 여기서 유지 가능성이나 우아함을 원치 않을 것입니다 .. 재미를위한 방법에서 총 토큰을 줄이는 방법을 찾고 있습니다. 이 방법은 긴 중첩 if-else 구조로 구성되어 있으며, 가장 적은 토큰으로 수행하는 방법은 3 원 운영자라는 것을 알았습니다. 본질적으로 나는 이것을 번역한다 :

String method(param) {

    if (param == null)
        return error0;

    else if (param.equals(foo1))
        if (condition)
            return bar1;
        else
            return error1;

    else if (param.equals(foo2))
        if (condition)
            return bar2;
        else
            return error1;

    ...


    else
        return error;

}

이에:

String method(param) {

    return 

        param == null ?
            error0 :

        param.equals(foo1) ?
            condition ?
                bar1 :
                error1 :

        param.equals(foo2) ?
            condition ?
                bar2 :
                error2 :

        ...

        error

    }

그러나 값을 반환하는 것 외에도 필드를 변경하거나 방법을 호출하려는 경우가 있습니다. 예,

    else if (param.equals(foo3))
        if (condition) {
            field = value;
            return bar3;
        }
        else
            return error3;

이 토큰 측면에서 가장 저렴한 방법은 무엇입니까? 내가 지금하고있는 일은 추악하지만 너무 많은 토큰을 낭비하지 않습니다 (여기서 필드는 줄입니다).

        param.equals(foo3) && (field = value) instanceOf String ?
            condition ?
                bar2 :
                error2 :

다시 말하지만, 요점은 좋은 코딩이 아닙니다. 저는 토큰 수를 줄이기위한 해킹을 찾고 있습니다. 전체를 쓰는 방법이 짧으면 그에게도 열려 있습니다. 제안 해주셔서 감사합니다.

편집 : 각 단어와 문장 부호 마크는 하나의 토큰으로 계산됩니다. 예를 들어, "String의 인스턴스"는 두 개의 토큰이지만 "! = null"은 3입니다. 가능한 개선을 위해 볼 수있는 주요 사항은 "&&"와 괄호입니다. 조건부 외에 "Field = value"를 어딘가에 넣는 방법이 있습니까? 그렇지 않다면 "Field = value"를 괄호가 필요없는 부울을 만드는 구성이 있습니까?

도움이 되었습니까?

해결책

(field = value) instanceof String

이미 귀하의 요구를 충족한다고 가정하면 (따라서 허위 반환이 포함됩니다. value ~이다 null), 더 짧은 대안이 있었을 것입니다

(field = value) != null

아니면 실제로 그것을 간과하고 만들고 싶다면 null 반품 true 또한 사용하십시오

(field = value) == value

1 글자 변수 이름을 사용하면 훨씬 짧게 만들 수 있습니다.

더 나아가 나는 다른 방법을 보지 못하고 우리 대부분 이이 모든 것이 다소 불쾌하다는 것에 동의합니다.)

다른 팁

param이 null 인 경우 0을 반환하십시오
그런 다음 매개 변수에서 Case/Switch/Select 문을 만드십시오. 그게 깨끗한 .

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top