문제

제 3 원업 자의 사용에 관한 내 사무실에서 토론이 나왔습니다. 이 토론에는 두 가지 측면이 있습니다.

측면 1) 3 원 운영자는 쓰기 쉽고 읽기 쉽기 때문에 편의성은 순 비용 절약입니다.

측면 2) 3 원 운영자는 약간 더 복잡하기 위해 수정해야한다면 과도한 코드-휘선이 필요하기 때문에 유지하기가 어렵다.

이 주제에 대해 최상위 기관이 수행 한 실제 연구를 인용 할 수 있다면 추가 대단한 점수 ... 이에 대한 하드 데이터를보고 싶습니다.


저의 이론은 최상의 코드는 쉽게 변경하고 적응할 수있는 코드이며, 변화가 필요하지 않아서 휴식에 대한 가능성이 줄어든다는 것입니다. 예시:

$id = $user->isRegistered() ? $user->id : null;

자, 이것은 완전히 유효하지만 코드가 약간 더 복잡해지기 위해 변경해야 할 때 어떻게됩니까?

$id = null;
if ($user->isRegistered() || $user->hasEmail()) {
    $id = $user->id;
}

모든 제정신 프로그래머는 3 원을보고 표준 IF/else로 전환합니다. 그러나이를 위해서는 4 라인 변경이 필요했습니다.

if ($user->isRegistered()) {
    $id = $user->id;
}

1 라인 변경 만 있으면됩니다.

도움이 되었습니까?

해결책

일단 구문에 익숙해지면 두 옵션이 모두 읽기 쉬운 것 (어느 쪽이든 배 밖으로 나가지 않는 경우) 나에게는 문제가되지 않습니다.

어느 쪽이 더 시간 효율적인지에 관해서는, 나는 불쾌한 질문으로 대답 할 것입니다. 왜 당신은 신경 쓰나요? 어느 쪽이든 옵션은 동등한 IF 문으로 변환하는 데 20 초 미만이 걸립니다.

개인적으로 나는 프로그래밍 시간을 초과하는 방법을 찾을 때 그것은 지연의 한 형태라는 것을 알았습니다. 나는 일을 끝내는 데 집중하고 작은 가독성 세부 사항이 경험을 통해 스스로 작동하게 할 때 가장 잘 작동합니다.

다른 팁

나는 당신의 예에서 Ternery 연산자를 고수합니다.

   $id = ($user->isRegistered() ||  $user->hasEmail())? $user->id : null;

유일한 "분기"가 변수에 할당 할 값을 결정하는 것이라면, Ternery 연산자는 수행중인 실제 기능을 잠재적으로 복제하지 않기 때문에 IF -ELSE 조항보다 더 읽을 수 있습니다 (이 경우 - 논리적 조건이 복잡해지면 코드 "$ id =")이 코드를 단순화하십시오.

   bool $isReg    = $user->isRegistered(),
        $hasEmail = $user->hasEmail();
   $id = ($isReg || $hasEmail)?  $user->id : null;

값이 적절한 부울 조건에 의존하는 한 줄 표현식이있을 때마다 3 차 연산자를 사용하고 싶습니다. 사실상, 변수에 할당을 선택해야한다면, 표현 1과 표현 2 중에서 선택할 수 있다면 종종 삼가를 사용합니다.

그러나 표현식에 부작용이 있으면 모든 것을 즉시 if () 문으로 다시 작성합니다. 흐름 제어를 위해 Ternary Operator를 사용하는 것은 대부분의 사람들에게 혼란 스럽습니다.

3 배의 작전에는 자리가 있습니다. 일반적으로 사소한 작업을 수행 할 때 코드를 단순화하는 것입니다. 그러나 어떤 시점에서 조건부 명세서가 너무 복잡해지면 전략을 다시 생각해야 할 수도 있습니다. 그 시점이 언제 결정되고 있습니다 ~이다 그것은 도전이됩니다. 그러면 경험 만 당신을 안내 할 수 있습니다.

따라서 최종 결과가 깨끗하고 읽기 쉬우 며 유지 관리 가능한 코드 인 한 "올바른"대답이 하나 있다고 생각하지 않습니다. 추가 코드 라인 if 이 결정을 할 때 진술을 고려해서는 안됩니다 (코드 줄 수가 반드시 코드의 복잡성과 1 대 1과 관련이 없기 때문입니다.)

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