이전: 원소 단위 논리 연산자, 상위 문서: 논리 표현식   [차례][찾아보기]


8.5.2 짧은 논리 연산자

if문과 while문의 조건식이 스칼라 값으로 암묵적으로 변환되기 때문에 옥타브의 원소 단위 논리 연산자로도 논리 연산 대부분에 충분합니다. 그러나 진리값을 사실상 도출한 그 즉시 논리 표현식을 멈추는 것이 좋을  때도 있습니다. 옥타브의 짧은 논리 연산자가 이 방식으로 작동합니다.

논리1 && 논리2

all (boolean1(:))와 똑같은 방식으로 표현식 논리1을 평가하여 스칼라로 바꿉니다. all (boolean1(:))이 거짓이면, 전체 표현식 결과가 0이 됩니다. all (boolean1(:))이 참이면, all (논리값2(:))와 똑같은 방식으로 표현식 논리2을 평가하여 스칼라로 바꿉니다. all (논리값2(:))가 참이면 전체 표현식 결과가 1이 됩니다. all (논리값2(:))가 거짓이면, 전체 표현식 결과가 0이 됩니다.

경고: 논리1이 빈 행렬이면 all (boolean1(:)) 평가 규칙에 예외가 생깁니다. 빈 행렬의 진리값은 언제나 거짓이므로 [] && true거짓이고, all ([])입니다.

논리1 || 논리2

all (boolean1(:))와 똑같은 방식으로 표현식 논리1을 평가하여 스칼라로 바꿉니다. all (boolean1(:))이 참이면, 전체 표현식 결과가 1이 됩니다. all (boolean1(:))이 거짓이면, all (논리값2(:))와 똑같은 방식으로 표현식 all (논리값2(:))을 평가하여 스칼라로 바꿉니다. all (논리값2(:))가 참이면 전체 표현식 결과가 1이 됩니다. all (논리값2(:))가 거짓이면, 전체 표현식 결과가 0이 됩니다.

경고: 빈 행렬의 진리값은 언제나 거짓입니다. [] && true 거짓이고, all ([])입니다.

두 계수가 전체 표현식의 진리값을 판단하기 전까지 평가되지 않는다는 점이 중요합니다.예를 들어, 아래 표현식에서

a && b++

변수 a가 0이 아닐 때만 변수 b가 증가합니다.

이를 약간 간결한 부호를 작성하는 데에 사용할 수 있습니다. 예를 들어, 아래처럼 작성하여,

function f (a, b, c)
  if (nargin > 2 && ischar (c))
    …

존재하지 않는 매개변수 평가를 피하기 위하여 if문 두 개를 쓰지 않아도 됩니다. 단박 논리 연산자가 없으면, 위 내용을 아래처럼 작성하여야 합니다.

function f (a, b, c)
  if (nargin > 2)
    if (ischar (c))
      …

아래와 같이 작성하여서,

function f (a, b, c)
  if (nargin > 2 & ischar (c))
    …

f에 매개변수 한두 개만 달고 호출하면,  연산자 ‘&’는 계수 두 개와 함께 평가하여야 하기 때문에 오류가 발생합니다.

매트랩if문과 while문에서 진리 표현을 사용하면 연산자 ‘&’와 ‘|’가 단박 논리 연산자처럼 기능하는 특별한 행동을 합니다. 옥타브도 호환을 위하여 이 방법을 채용하기는 하지만, 이 방식의 ‘&’와 ‘|’ 사용은 매우 권장되지 않으며, 경고를 출력합니다.  단박 논리 연산자가 필요하면 무조건 ‘&&’와 ‘||’ 연산자를 사용하십시오.

마지막으로, 옥타브는 삼항 연산자(?:)를 지원하지 않습니다. 단박 논리 연산이 중요하지 않으면, ifelse 함수를 대신 사용합니다.

merge (, 참_값, 거짓_값)
ifelse (, 참_값, 거짓_값)

의 값에 따라 참_값이나 거짓_값의 원소를 합칩니다.

이 논리 스칼라이면, 나머지 두 매개변수에는 아무 값이나 가능합니다. 그 외에는, 은 반드시 논리 배열이어야 하고, 참_값거짓_값은 둘 다 분류 배열 또는 낱칸 배열이어야 합니다. 이 스칼라인 경우에는, 이 참이면 참_값을 반환하고, 이 거짓이면 거짓_값을 반환합니다.

본이 배열이면, 참_값거짓_값이 반드시 스칼라이거나 과 차원이 같은 배열이어야 합니다. 결과는 아래와 같습니다.

result(mask) = tval(mask);
result(! mask) = fval(! mask);

에는 모든 수치 자료형이 가능하며, 해당 내용은 논리 값으로 먼저 바뀝니다.

같이 보기: logical, diff.


이전: 원소 단위 논리 연산자, 상위 문서: 논리 표현식   [차례][찾아보기]