A?B:C 를 많이 쓰시는지요...?

eminency의 이미지

C에서의 유일한 3항 연산자인 '?:'에 대한 질문입니다.

사실 저는 다른 사람(회사 내의..)에 비해 많이 쓰는 편입니다만...
사실 막상 쓸 일은 자주 없는 것 같더군요 -_-;

대개 다음의 경우에 저는 씁니다만...

if (A)
{
  c = 1;
}
else
{
  c = 0;
}

c = A ? 1 : 0;

이런 경우 외에는 아주 없진 않지만 사실 거의 없었던 것 같습니다.
특별히 이 연산자를 활용하는 테크닉이나 쓰여야만 할 경우가 있는지 궁금하군요.

경험 많으신 분들의 조언 바랍니다.

송효진의 이미지

안쓰려 하는 이유는 가독성저하 밖에 없다고 봅니다.
제 눈에는 3항 모두 단순하면 if보다 가독성이 더 높아보이기 때문에
자주 사용합니다.

doldori의 이미지

테크닉이라고 할 것까지는 없고, 삼항 연산자는 if-else와 의미가 같습니다만
중요한 차이는 삼항 연산자는 수식(expression)이고 if-else는 문장이라는 것입니다.
예를 들어 위의 코드를 약간 변형해 봅시다.

void f(int);

int c;
if (A) 
{ 
  c = 1; 
} 
else 
{ 
  c = 0; 
} 

f(c);

함수를 호출하기 위해 별 쓸모도 없는 변수 c를 선언하고 길게 늘여썼습니다.
삼항 연산자를 쓰면 f(A ? 1 : 0) 만으로 되죠. 함수 인자에는 문장이 아닌 수식을
써야 하기 때문에 이 경우 삼항 연산자는 아주 간편한 방법을 제공합니다.
함수의 반환값에 대해서도 마찬가지 얘기를 할 수 있고요.
또한 대부분의 매크로는 수식처럼 쓰일 수 있도록 정의하는데 이때는 if-else를
쓸 수 없습니다. (gcc의 확장에 문장을 수식처럼 쓸 수 있도록 하는 기능이 있지만
이식성은 없으니 논외로 하겠습니다.)
litdream의 이미지

저도 잘 안씁니다만, perl 쓸때 한번씩 씁니다.
perl 은 한문장이라도 반드시 {} 를 해줘야 하기때문에, 이리저리 curly brace가
난무하면 화가 나더라고요. 또 statement if (condition); 이거 별로 안좋아해서,
condition ? stmt1 : stmt2 종종 합니다.

삽질의 대마왕...

쌀밥의 이미지

C++에서 const 변수를 사용하기 위해서 종종 사용합니다.

예를 들어

const int a = ((b > 30) ? 1 : 40);

이런식이죠.
이 문장을 if문으로 바꿔서 쓰게 되면 const int 형 변수로 쓰는게 더 복잡해지거든요...

일하는 사람들의 희망 민주노동당 : http://www.kdlp.org
반공 교육의 성과로, 민주주의의 반대가 공산주의(또는 사회주의)라고 생각하는 사람이 많다.

zelon의 이미지

int, bool 의 변환할 때등 간단할 때만 씁니다.

 a.addBool( aInt == 1 ? true : false);

-----------------------------------------------------------------------
GPL 오픈소스 윈도우용 이미지 뷰어 ZViewer - http://zviewer.wimy.com
블로그 : http://blog.wimy.com

ㅡ,.ㅡ;;의 이미지

전종종 쓰는데요..

if 문 만큼이나 자주 애용하는데..

예를들자면.. aaa( a, b? c : d ) 등으로 쓰죠..
여기에 if 문쓸순 없으니까요..

같은 예지만. 매개변수에 NULL 이 들어가지 않게 하기위해서도

aaa( str ? str : "" ) 라고 줄수도 있습니다.


----------------------------------------------------------------------------

deisys의 이미지

저도 종종 씁니다. 저는 reaction = ( you == babo ? merong : good ) 식으로 항상 물음표 앞에 비교식을 써줍니다. if-else 보다 눈에 더 잘 들어오더군요 - 간단한 경우에는요.
ruby에서도 ---? 처럼 물음표로 끝나는 method들이 눈에 잘 들어오던데요.

무엇보다도 요즘에는 코드의 readability 가 중요한 것 같습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.