문제

짧은 경우 한 줄로 유지합니다. 최근에 나는이 스타일을 더 길거나 중첩 된 3 원 운영자 표현에 사용해 왔습니다. 고안된 예 :

$value = ( $a == $b ) 
            ? 'true value # 1'
            : ( $a == $c )
                ? 'true value # 2'
                : 'false value';

개인적으로 어떤 스타일을 사용하거나 가장 읽기 쉬운 것을 찾을 수 있습니까?

편집하다: (Ternary-Operator를 사용하는시기)

나는 보통 2 레벨 이상의 깊은 삼원 운영자를 사용하지 않습니다. PHP 템플릿 스크립트에서 변수를 반영 할 때 2 레벨 IF-ELSE보다 2 레벨의 깊은 3 원 운영자를 선호합니다.

도움이 되었습니까?

해결책

3 원 운영자는 일반적으로 피해야하지만이 형태는 매우 읽을 수 있습니다.

  result = (foo == bar)  ? result1 :
           (foo == baz)  ? result2 :
           (foo == qux)  ? result3 :
           (foo == quux) ? result4 : 
                           fail_result;

이런 식으로 조건과 결과는 같은 줄에 함께 유지되며, 훑어보고 무슨 일이 일어나고 있는지 이해하기가 상당히 쉽습니다.

다른 팁

나는 중첩 된 조건을 작성하기 위해 3 배 연산자를 사용하지 않으려 고 노력합니다. 그것은 가독성을 무시하고 조건부를 사용하는 것보다 추가 가치를 제공하지 않습니다.

단일 라인에 맞을 수 있고 그것이 의미하는 바에 맞는 경우에만 사용합니다.

$value = ($a < 0) ? 'minus' : 'plus';

개인적으로, 나는 한 줄에 맞는 경우에만 3 원 운영자 만 사용합니다. 스팬이 필요하다면, 좋은 늙음을위한 시간입니다.

if else if else

스타일 i 때때로 언급되지 않았기 때문에 내가 가져 오는 사용은 다음과 같습니다.

$result = ($x == y)
        ? "foo"
        : "bar";

.. 그러나 보통 하나의 줄에 모든 것을 넣는 경우에만 너무 길어집니다. 나는 그것을 가지고있다 = ? : 모든 라인업은 깔끔하게 보이게합니다.

PHP 중첩 3 원 운영자는 다르게 행동합니다.

이 구문은 다음 테스트를 모두 전달합니다. 기반 http://deadlytechnology.com/web-development-tips/php-ternary-syntax/

$myvar = ($x == $y)
?(($x == $z)?'both':'foo')
:(($x == $z)?'bar':'none');

.

보다: http://au.php.net/ternary

예제 #3 "비 끔찍한 3 대의 행동"은 다음이 PHP에서 작동하지 않는 이유를 설명합니다.

$x = 1;
$y = 2;
$z = 3;   
$myvar = ($x == $y) 
       ? "foo" 
       : ($x == $z) 
         ? "bar" 
         : "none";  
$myvar == 'none'; // Good

$x = 1;
$y = 2;
$z = 1;   
$myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none";  
$myvar == 'bar'; // Good

$x = 1;
$y = 1;
$z = 3;   
$myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none";  
$myvar == 'bar'; // Bad!

$x = 1;
$y = 1;
$z = 1;   
$myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none";  
$myvar == 'bar'; // Bad!

3 배 운영자는 간단한 IF 문을 작성하는 짧은 효과적인 방법입니다. 중첩되거나 읽기가 어렵지 않아야합니다. 기억하십시오 : 소프트웨어를 한 번 작성하지만 100 번 읽습니다. 쓰기보다 읽는 것이 더 쉽습니다.

나는 괄호 안에 조건을 둘러싼 경향이있다 : (a == b)? 1 : 0

나는 평범한 의견에 반대 할 것이다. 나는 조건부 운영자 스타일을 가진 Imran과 비슷합니다. 한 줄에 깨끗하게 맞으면 한 줄에 보관합니다. 한 줄에 깨끗하게 맞지 않으면 깨지지 만, 단일 탭 (4 개의 공백; vs가 탭에 공백을 삽입하도록 설정되어 있음) 만 사용합니다. 나는 즉시 점프하지 않습니다 if-else, 많은 시간이 지남에 따라 조건부 운영자가 맥락 적으로 더 의미가 있기 때문입니다. (그러나 맥락 적으로 의미가 없다면, 나는 단순히 그것을 사용하지 않습니다.)

또한 조건부 운영자를 둥지하지 않습니다. 그 시점에서 나는 읽기가 너무 어렵다는 것을 알았고 이제 더 장황한 사람에게 갈 시간입니다. if-else 스타일.

"고려 된 예"는 내가 왼쪽 마진에서 들여 쓰기를 제외하고는 (또는 위의 줄에있는 모든 것이 없는지)를 제외하고는 내가 그것을 들여 쓰기하는 방법이다.

Ternary Detractors에게 - 가독성이 요점입니다. 더 읽기 쉬운 코드를 만들지 않는다고 생각한다면 사용하지 마십시오. 그러나 나는 적어도 어느 정도의 경우에 반대되는 것을 발견했다.

3 원 조건은 코드를 더 깨끗하고 우아하게 만들 수 있으며, 가장 중요한 것은 올바른 것들을 강조하고 자신을 반복하지 않도록 도와줍니다. 그것들을 사용하는 것을 고려하십시오. 그러나 코드를 덜 읽을 수 없게 만들지 마십시오. vb.net에서 :

'before refactoring 
If x = 0 Then                    ' If-Then-Else puts emphasis on flow control
    label = "None"
Else
    label = Foo.getLabel(x)      '  If-Then-Else forces repeat of assignment line
End If

'after refactoring    
label = If(x = 0, "None", Foo.getLabel(x)) ' ternary If puts emphasis on assignment

"읽기 쉬운 것"은 "그것을보고있는 데 익숙하지 않다"와 같은 것이 아닙니다.

나는 그것을 사용하지 않습니다. 작은 소스 == 더 효율적인 컴파일 코드를 기대하면서 공간을 절약하고 소스 코드를 입력하려고하는 것처럼 항상 냄새가났습니다.

나는 그것을 읽을 수 없다는 것을 알지 못하지만, 그 중 상당수는 결코 그것을 사용하지 않기 때문입니다.

나는 내가 찾은대로 3 원 운영자를 전혀 사용하지 않는 경향이있다.

Imran, 당신은 이것을 아름답게 포맷했습니다. 그러나 2 개 이상 둥지를 틀면서 3 배의 운영자가 읽을 수없는 경향이 있습니다. IF-ELSE 블록은 추가 수준의 이해할 수있는 중첩을 제공 할 수 있습니다. 그 외에도 함수 또는 테이블 구동 프로그래밍을 사용하십시오.

$foo = (isset($bar)) ? $bar : 'default';

나는 개인적으로 변수 (Java)의 할당에만 사용합니다.

String var = (obj == null) ? "not set" : obj.toString();

(기타 예) 기능을 사용하는 경우 다음과 같은 NULL 매개 변수를 허용하지 않습니다.

String val; [...]
int var = (val == null) ? 0 : Integer.parseInt(val);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top