삼항 연산자에 사용하는 코딩 스타일은 무엇입니까?
짧은 경우 한 줄로 유지합니다. 최근에 저는 더 길거나 중첩 된 삼항 연산자 표현식에이 스타일을 사용하고 있습니다. 인위적인 예 :
$value = ( $a == $b )
? 'true value # 1'
: ( $a == $c )
? 'true value # 2'
: 'false value';
개인적으로 어떤 스타일을 사용하거나 가장 가독성이 좋습니까?
편집 : (삼항 연산자를 사용할 때)
나는 보통 2 개 이상의 수준의 삼항 연산자를 사용하지 않는다. PHP 템플릿 스크립트에서 변수를 에코 할 때 2 레벨 if-else보다 2 레벨 깊은 삼항 연산자를 선호하는 경향이 있습니다.
삼항 연산자는 일반적으로 피해야하지만이 형식은 매우 읽기 쉽습니다.
result = (foo == bar) ? result1 :
(foo == baz) ? result2 :
(foo == qux) ? result3 :
(foo == quux) ? result4 :
fail_result;
이런 식으로 조건과 결과가 같은 줄에 함께 유지되고 상황을 훑어보고 이해하는 것이 상당히 쉽습니다.
중첩 된 조건을 작성하기 위해 삼항 연산자를 사용하지 않으려 고합니다. 가독성을 무시하고 조건부 사용에 대한 추가 가치를 제공하지 않습니다.
한 줄에 들어갈 수 있고 그 의미가 명확 할 때만 사용합니다.
$value = ($a < 0) ? 'minus' : 'plus';
개인적으로 한 줄에 맞을 때만 삼항 연산자를 사용합니다. 스팬해야한다면 좋은 노인을위한 시간입니다
if else if else
내가 가끔 사용 하는 스타일 은 언급되지 않았기 때문에 언급하고 있습니다.
$result = ($x == y)
? "foo"
: "bar";
.. 그러나 일반적으로 모든 것을 한 줄에 넣으면 너무 길어질 때만 가능합니다. 내가 가진 것을 발견 = ? :
모든 라인을하는 것이 깔끔한 볼 수 있습니다.
PHP 중첩 삼항 연산자는 다르게 작동합니다.
이 구문은 다음 테스트를 모두 통과합니다. 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 "명백하지 않은 삼항 동작"은 다음이 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!
삼항 연산자는 간단한 if 문을 작성하는 짧고 효과적인 방법입니다. 중첩되거나 읽기 어렵지 않아야합니다. 기억하십시오 : 소프트웨어를 한 번 작성했지만 100 번 읽습니다. 쓰기보다 읽기가 더 쉬워야합니다.
조건을 괄호로 묶는 경향이 있습니다. (a == b)? 1 : 0
I'll dissent with the common opinion. I'm sort of like Imran with my conditional operator style. If it fits cleanly on one line, I keep it on one line. If it doesn't fit cleanly on one line, I do break it, but I use only a single tab (4 spaces; I have VS set to insert spaces for tabs) for the indent. I don't immediately jump to if
-else
, because a lot of the time the conditional operator makes more sense contextually. (If it doesn't make sense contextually, however, I simply don't use it.)
Also, I don't nest conditional operators. At that point, I do find it too difficult to read, and it's time to go to the more verbose if
-else
style.
The "contrived example" is how I would indent it, except that I would indent from the left margin, not based on where the ( or whatever is on the line above.
To the ternary detractors - readability is the point. If you don't think it makes for more readable code, don't use it. But I find the contrary to be the case at least some of the time.
The ternary conditional can make code cleaner and more elegant, and most importantly, help you put emphasis on the right things and avoid repeating yourself. Consider using them, but do not make the code less readable by doing so. In 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
Note that "it is less readable" is not the same thing as "I'm not used to seeing that".
I don't use it. It always smelled to me like trying to save space and typing in source code with the expectation that small source == more efficient compiled code.
I don't find it readable at all, but much of that is because I just never use it.
I tend not to use the ternary operator at all as I find if .. else much more readable.
Imran, you have formatted this beautifully. However, the ternary operator does tend to get unreadable as you nest more than two. an if-else block may give you an extra level of comprehensible nesting. Beyond that, use a function or table-driven programming.
$foo = (isset($bar)) ? $bar : 'default';
I personally only use it for an assignment of a variable (in java) for example :
String var = (obj == null) ? "not set" : obj.toString();
and (other example) when using function that doesn't allow null parameter such as :
String val; [...]
int var = (val == null) ? 0 : Integer.parseInt(val);
ReferenceURL : https://stackoverflow.com/questions/243217/which-coding-style-you-use-for-ternary-operator
'programing' 카테고리의 다른 글
Android : MediaPlayer setVolume 함수 (0) | 2021.01.16 |
---|---|
자바 InputStream 모의 (0) | 2021.01.16 |
왼쪽 / 오른쪽과 위 / 아래 사이의 스 와이프 방향을 감지하는 방법 (0) | 2021.01.16 |
Spark : Spark Shell에서 Spark 파일을 실행하는 방법 (0) | 2021.01.16 |
인수 밑줄이있는 디 바운스 함수 (0) | 2021.01.16 |