2010-01-07 4 views
2

이 코드를 가지고할당 및 상태 평가

def errorMap = validateParams(params) 
if (errorMap) { 
    flash.errorMap = errorMap 
    return 
} 

내 질문은 이것이다 : 나는 같은 하나 라이너를 만들기 위해 라인 # 1, 라인 # 2의 조건의 평가에 할당을 결합 할 수 있습니다 다음 :

if (flash.errorMap = validateParams(params)) { 
    return 
} 

이렇게하는 것이 나쁜 습관입니까?

감사

비제이 쿠마르는 매우 좋은 습관이다 내 의견으로는

+1

두 번째 발췌 문장에서 원래 논리가 변경됩니다. 두 번째 예제는 데이터의 유효성에 관계없이 항상 'flash.dataMap'을 덮어 쓰는 반면, 오류 맵이있는 경우 첫 번째 예제 만 덮어 씁니다. – noah

+0

@noah : validateParams (params)가 false와 비슷한 값 (예 : undefined, null, 0 또는 false)을 반환하면 flash.errorMap을 덮어 쓰지 않습니다. 그래서 그는 그 기술에 대한 강점 중 하나 인 원래의 논리를 바꾸지 않을 것입니다. –

+0

@Sune 음, 죄송합니다. 두 번째 코드에서 항상 덮어 씁니다. 두 번째는 flash.errorMap = validateParams (params)와 같습니다. if (flash.errorMap) { return } – noah

답변

0

. 함수를 호출하고 리턴 값을 테스트하는 것은 함께 고려되어야하며 소스 코드에 함께 넣어두면 도움이됩니다. 이것을 습관적으로 수행한다면 실수로 함수를 호출하는 것이 본질적으로 불가능하지만 코드가 성공했는지 여부는 확인하지 않아도됩니다.

0

이 코드가 C++ 또는 C# 코드 인 경우 조건의 할당과 평가를 결합 할 수 있습니다. 비교 (==) 대신 할당 (=)을 사용하는 것을 절대적으로 피하십시오. 당신은 그것을 알아내는 시간을 낭비 할 수 있습니다.

또한 매개 변수를 수정하는 조건을 사용할 때주의하십시오. 예를 들어

, 경우 (X ++> 100) doStuff()

VS

경우 (X + 1> (100)) doStuff()

1

우리는 C 형 언어 교화되는 single-equals "="는 if 문에서 오타처럼 보입니다. 단일 - 같음이 의미하는 바를 수행하는 구문을 사용하면 오타를 발견하기가 더 어려워집니다.

분명히 할 수 있지만 내 자신의 두 센트는 대개 나쁜 습관입니다. 간결하지만 if 문은 과제 평가에 의존하고 있습니다. 나중에 수개월 후에이 코드를 다시 방문하면 즉시 명확하지 않을 수 있습니다.

0

격리 된 코드가 정확하고 멋지게 보이지만 if 절 안에있는 대입 연산자 (=)는 더 널리 사용되는 비교 연산자 (==)로 간과 될 가능성이 높으므로 문제가 더 커집니다.

실제로 사용하지 않을 것입니다. 그래도 선다형으로 좋은 질문을 할 수 있습니다.