산술·논리 연산자
산술·논리 연산자 (Arithmetic and Logical Operators)
*연산자(operator)*는 하나 이상의 다른 표현식을 변환하거나 결합하는 표현식의 한 유형이에요. 연산자는 두 값을 어떤 방식으로든 결합해 세 번째 결과 값을 만들거나, 주어진 단일 값을 변환해 단일 결과를 만들어요.
출처: 문서
본문
두 값에 적용되는 연산자는 수학 표기처럼 두 값 사이에 연산 기호를 둬요. 예: 1 + 2. 단일 값에 적용되는 연산자는 기호를 값 앞에 둬요. 예: !true.
테라폼 언어에는 산술과 논리 모두를 위한 연산자 집합이 있으며, JavaScript나 Ruby 같은 프로그래밍 언어의 연산자와 비슷해요.
하나의 표현식에서 여러 연산자가 함께 사용될 때는 다음 연산 순서(연산자 우선순위)로 평가돼요.
!,-(-1 곱하기)*,/,%+,-(뺄셈)>,>=,<,<===,!=&&||
기본 연산 순서를 바꾸려면 괄호를 사용해요. 괄호가 없으면 높은 우선순위부터 평가되므로, 테라폼은 1 + 2 * 3을 1 + (2 * 3)으로 해석하지 (1 + 2) * 3으로 해석하지 않아요.
여러 연산자는 유사한 동작을 가진 몇 개의 그룹으로 묶을 수 있어요. 아래에서 설명할게요. 각 연산자 그룹은 주어진 값이 특정 타입이기를 기대해요. 테라폼은 값을 요구되는 타입으로 자동 변환을 시도하며, 자동 변환이 불가능하면 오류 메시지를 만들어요.
? 문자와 : 문자의 조합은 테라폼에서 조건식(conditional expression)의 일부이며 연산자로 간주되지 않아요. 자세한 내용은 조건식을 참고하세요.
산술 연산자 (Arithmetic Operators)
산술 연산자는 모두 숫자 값을 기대하고 결과로 숫자 값을 만들어요.
a + b—a와b를 더한 결과를 반환해요.a - b—a에서b를 뺀 결과를 반환해요.a * b—a와b를 곱한 결과를 반환해요.a / b—a를b로 나눈 결과를 반환해요.a % b—a를b로 나눈 나머지를 반환해요. 이 연산자는 보통 정수와 함께 사용할 때만 유용해요.-a—a에 -1을 곱한 결과를 반환해요.
테라폼은 함수로 몇 가지 덜 흔한 숫자 연산도 지원해요. 예를 들어 the pow 함수로 지수(exponent)를 계산할 수 있어요.
동등 연산자 (Equality Operators)
동등 연산자는 모두 임의 타입의 두 값을 받고 결과로 boolean 값을 만들어요.
a == b—a와b가 둘 다 같은 타입이고 같은 값이면true, 그렇지 않으면false를 반환해요.a != b—a == b의 반대예요.
동등 연산자는 동등성을 판단하기 위해 두 인자가 정확히 같은 타입이어야 하므로, 이 연산자는 기본(primitive) 타입 값에만 사용하거나, 비교에 의도하는 타입을 나타내기 위해 명시적 타입 변환 함수를 함께 사용하는 것을 권장해요.
구조적 타입 간의 비교는 각 인자의 타입을 확신하지 못하면 놀라운 결과를 만들어낼 수 있어요. 예를 들어 var.list == []는 var.list가 빈 리스트라면 true를 반환할 것 같지만, []는 실제로 tuple() 타입의 값을 만들기 때문에 두 값은 결코 일치할 수 없어요. 이런 상황에서는 대신 length(var.list) == 0이라고 쓰는 것이 더 명확한 경우가 많아요.
비교 연산자 (Comparison Operators)
비교 연산자는 모두 숫자 값을 기대하고 결과로 boolean 값을 만들어요.
a < b—a가b보다 작으면true, 그렇지 않으면false를 반환해요.a <= b—a가b보다 작거나 같으면true, 그렇지 않으면false를 반환해요.a > b—a가b보다 크면true, 그렇지 않으면false를 반환해요.a >= b—a가b보다 크거나 같으면true, 그렇지 않으면false를 반환해요.
논리 연산자 (Logical Operators)
논리 연산자는 모두 bool 값을 기대하고 결과로 bool 값을 만들어요.
a || b—a나b중 하나라도true이면true, 둘 다false이면false를 반환해요.a && b—a와b가 둘 다true이면true, 하나라도false이면false를 반환해요.!a—a가false이면true,a가true이면false를 반환해요.
테라폼에는 "배타적 OR(exclusive OR)" 연산을 위한 연산자가 없어요. 두 연산이 모두 boolean 값임을 안다면 배타적 OR은 !=("같지 않음") 연산자와 동일해요.