2015-01-27 2 views
0

아주 단순하고 조건부 동작을 수행하기 위해 삼항 연산자를 사용했습니다. 잘 작동했지만 IDE (PHPStorm)에서 오류로보고했습니다. 내가 가진 오류 :3 진 연산자의 사용 가능한 사례입니까?

'void' method 'performAction' result used

내가 사용 된 코드는 이것이다 :

($this->doThis ? $class->performAction() : $class->performDifferentAction()); 

가 PHPStorm의 오류가 분명히 잘못이다; 나는 어디에서나 void 메쏘드의 결과를 사용하지 않는다. 난 그냥 메서드를 호출하고 그 예상대로 작동합니다. 방금이 삼항 연산자를 짧은 핸드로 사용했습니다.

if($this->doThis) 
{ 
    $class->performAction(); 
} 
else 
{ 
    $class->performDifferentAction(); 
} 

이 연산자는 3 진 연산자의 유효한 사용법처럼 보입니다. 난독 화되지 않고 읽기 쉽고 짧습니다.

그럼에도 불구하고 설계상의 결함이 있습니까?

+1

유효한 케이스처럼 보이지 않습니다. * 조건부 연산자 *는 어딘가에서 결과를 반환해야합니다. – zerkms

+0

그리고 그 의무는 어디에서 찾을 수 있습니까? – Sherlock

+0

그것은 의무가 아니라 상식입니다. Expression은 정의에 따라 값을 반환해야합니다. 그 라인의 코드 리뷰 작성자라면 - 통과시키지 않을 것입니다. – zerkms

답변

3

이항 연산자는 표현이고 결과는입니다. 그 목적은 하나 또는 두 개의 추가 변수를 작성해야하는 "인라인 조건"이 필요할 때 사용하는 것입니다. 따라서 삼항 연산자를 사용할 때마다 그 결과를 사용할 것으로 예상됩니다.

예를 들어, 이것을 쓰지 않을 것입니다.

1 + someFunc(); // soooo... does this do anything? 

귀하의 IDE 따라서 명시 적으로 if..else를 사용하여 부작용의 코드를 작성 촉구 :

1 + 2; // result not used, does nothing 

그것에 부작용을 같은 코드를 작성하지만, 추가 당신이 본질적으로 무슨 일을하는지가 . 더 직접적으로 당신이하는 일을 표현합니다.

모든 것을 말하면 궁극적으로 당신과 당신의 스타일에 달려 있습니다. PhpStorm에는 환경 설정이 있습니다. 이를 무시하려면 해당 검사를 끄십시오. 그러나이 검사는 더 나은 코드를 작성하는 데 도움이됩니다. 만약 당신이 어쨌든 반환 값을 할당하기 위해을 잊었다 고 경고 할 것입니다.

+0

당신의 2 가지 예와 나의 차이점이 있습니다. 귀하의 코드는 아무 것도 _do_하지 않습니다; 내 것이. (음,'someFunc'는 무언가를 할 수는 있지만,'1 +'은 분명히 쓸데없는 것입니다.) 스 니펫에 '쓸데없는'코드가 없습니다.) – Sherlock

+0

정확히 말하자면, *'* 1+ someFunc()'* do * 뭔가 있니? 반환 값은 사용되지 않으므로 아무 작업도 수행하지 않거나 ... 수행합니까? 코드는 동일합니다 :'$ foo? 1 : bar()'. Sooooo .... 단순히 오자가있어서 반환 값을 사용하는 것을 잊었거나'bar()'에 부작용이 있습니까? 'if ($ foo) bar()'라고 쓰면 훨씬 더 명백합니다. – deceze

+0

"분명히 쓸모가 없다"--- 그리고 연산자 오버로딩을 허용하는 프로그래밍 언어라면? 너에게 더 이해가 되겠니? – zerkms