ex)
var a = 1
var b = 2
a + b
// + 를 연산자
// a, b 를 피연산자라고 한다.
ex)
+ a // 이렇게 피연산자가 하나 존재한다면 단항연산자라고 한다.
ex)
a + b // 피연산자가 두개 존재한다면 이항연산자라고 한다.
/* 단항연사자를 사용하고 싶다면 반드시 공백 없이 표현해야 연산자로써 유효한 기능을 수행한다. */
+a // => o
+ a // => x
ex)
var a2 = 1
var b2 = 2
var c2 = 0
a2 == 1 ? b2 : c2 // 피연산자가 세개 존재한다면 삼항연산자라고 한다.
:
ex)
var x: Bool = true
!x // 연산자가 피연산자 앞에 위치해 있다면 전치 연산자라고 한다.
ex)
a + b // 연산자가 피연산자 사이에 위치해 있다면 중치연산자라고 한다.
ex)
var opt: Int? = 1
opt! // 연산자가 피연산자 뒤에 위치해 있다면 후치연산자라고 한다.
ex)
a + b
a - b
a * b
a / b
a % b
a == b // equal to
a != b // not equal to
a > b // greater than
a >= b // greater than or equal to
a < b // less than
a <= b // less than or equal
(1). && => Logical And
ex) */
true && true
true && false
false && true
false && false
(2). || => Logical Or
ex)
true || true
true || false
false || true
false || false
(3). ! => (Logical not)
ex)
!true
!false
논리연산자를 사용할때 주의해야 할점은 단락평가(short- circuit evaluation)을 항상 고려해야 한다는 것이다. 단락평가는 최소한의 평가를 하는 것으로써, 만약 첫번째 값이 참이 된다면 두번째 값은 평가하지 않고 첫번째 값을 반환한 뒤에 코드를 종료하는 것 을 말한다.
ex)
false && true
Logical And는 두 값이 모두 true가 되어야 true를 반환한다. 그러나 첫번째 피연산자가 false이기 떄문에 두번째 피연산자는 평가할 필요가 없으므로 단락평가를 실행하여 false를 반환한다.
ex)
false && false // 위 내용과 같다.
ex)
true || true /* Logical Or는 두값중 하나만 true가 되더라고 true가 반환된다.
첫번째 피연산자가 이미 true이기때문에 두번째 피연산자를 평가할 필요없이 단락평가를 실
행하여 true를 반환환다.*/
ex)
true || false // 위내용과 같다.
ex)
a = a + b // --> a += b
a = a - b // --> a -= b
a = a * b // --> a *= b
a = a / b // --> a /= b
lowerBound 배열의 맨 처음 값
UpperBound 배열의 맨 마지막 값
ex)
1 ... 10
1...10
//만약 오름차순을 내림차순으로 바꾸고 싶다면 .reversed()라는 메소드를 사용한다.
(1 ... 10).reversed()
12.34 ... 56.78
ex)
1 ..< 10
1..<10
만약 범위연산자를 반복문에서 사용하고 싶다면, 무한루프에 주의 해야한다.
ex)
for num in 1... {
print(num)
}
UpperBound를 지정해주지 않았기 때문에 범위는 무한대가 되어, 무한루프에 빠지게 된다.고정된 범위가 지정이 되어있지 않은 상태에서 단항연산자를 사용하는 것은 위험하다.
오버플로우 덧셈연산자 == (&+)
오버플로우 뺄셈연산자 == (&-)
오버플로우 곱셈연산자 == (&*)
var num = Int8.max // 127
num = num &+ 1 // - 128
* Int8 의 값범위는 -128 ~ +127 이다. 현재 Int8.max에 1을 더해주었기 때문에 에러가 발생해야 하지만, 오버플로우 연산자를 사용한 덕분에 Int8의 최솟값인 -128 로 값이 순환되었다.