Ruby에는 흐름 제어 표현식이라고 하는 것이 있어요. 이 표현식은 프로그램이 실행되는 방식을 제어하는 데 사용되고, 참 같은 값이나 거짓 같은 값을 가져요. 참 같은 값이나 거짓 같은 값을 만드는 데 사용할 수 있는 연산자들도 있는데, 이런 연산자를 비교 연산자라고 해요.
프로그램에서 어떤 코드가 실행되고 어떤 코드는 실행되지 않을지, 즉 어떤 분기가 실행될지를 제어하는 주요 제어 표현식은 두 가지예요.
그 두 가지는 if와 unless 표현식이에요.
비교 연산자는 값을 비교해서 true나 false 값을 반환하는 데 사용해요.
다음 연산자들은 같은 타입의 두 값을 비교해야 해요.
값의 타입이 서로 다르면 컴파일러가 오류를 발생시켜요.
다음은 연산자 목록과, true 값을 반환하는 예시예요:
| 메서드 | 설명 | 예시 |
|---|---|---|
| < | 보다 작음 | 4 < 5 |
| <= | 작거나 같음 | 4 <= 4 |
| > | 보다 큼 | 3 > 1 |
| >= | 크거나 같음 | 2 >= 2 |
같음과 다름 연산자는 앞에서 언급한 연산자들과 달리 어떤 타입의 값이든 비교할 수 있어요.
== 연산자는 두 값이 같은지 확인하는 데 사용되는데, 값의 타입까지 확인해요.
!=도 같은 방식으로 동작하지만, 두 값이 다르면 true를, 같으면 false를 반환해요.
다음은 같음과 다름 연산자 목록과, true 값을 반환하는 예시예요:
| 메서드 | 설명 | 예시 |
|---|---|---|
| == | 같음 | 4 == 4 |
| != | 다름 | 5 != 4 |
결합 비교 연산자(때때로 우주선 연산자라고도 불려요)는 특별한 비교 연산자예요.
참 같은 값이나 거짓 같은 값이 아니라 숫자를 반환한다는 점에서 특별해요.
<=>로 쓰고, 두 값을 비교하는 데 사용해요.
왼쪽 값이 오른쪽 값보다 크면 1을, 왼쪽 값이 오른쪽 값보다 작으면 -1을, 두 값이 같으면 0을 반환해요.
1 <=> 2 # => -1
2 <=> 2 # => 0
3 <=> 2 # => 1
if 문은 주어진 조건이 "참 같은 값"인지 "거짓 같은 값"인지 확인하는 데 사용해요.
조건이 참 같은 값이면 if 문 안의 코드가 실행돼요.
if 문은 end 키워드로 끝나요.
value = 1
if value == 1
"1 is equal to 1"
end
# => "1 is equal to 1"
if value > 2
"1 is greater than 2"
end
# => nil
unless 문은 if 문과 아주 비슷하게 동작하지만, 조건이 거짓 같은 값일 때 unless 문 안의 코드를 실행해요.
value = 1
unless value == 1
"1 is not equal to 1"
end
# => nil
unless value > 2
"1 is not greater than 2"
end
# => "1 is not greater than 2"
else 문은 if 문과 함께 사용할 수 있어요.
if 분기가 실행되지 않으면 else 문이 실행돼요.
value = 1
if value == 1
"1 is equal to 1"
else
"1 is not equal to 1"
end
# => "1 is equal to 1"
if value > 2
"1 is greater than 2"
else
"1 is not greater than 2"
end
# => "1 is not greater than 2"
elsif 문은 if 문과 함께 사용할 수 있어요.
if 분기가 실행되지 않았고 elsif 문의 조건이 참 같은 값이면 elsif 문이 실행돼요.
elsif 문은 여러 개를 이어 붙일 수 있고, 조건이 참이 되는 첫 번째 분기가 실행돼요.
if 문 끝에 else 문을 둘 수도 있는데, 앞의 문들이 모두 참이 아니면 이 else 문이 실행돼요.
value = 1
if value == 0
"1 is equal to 0"
elsif value > 2
"1 is greater than 2"
else
"1 is not equal to 0 and 1 is not greater than 2"
end
# => "1 is not equal to 0 and 1 is not greater than 2"
if와 unless 문은 [접미사][if-as-suffix]로도 쓸 수 있어요. 조건이 참일 때 코드 한 줄만 실행하고 싶을 때 유용해요. 실행하려는 코드 뒤에 if나 unless 문을 붙이면 돼요.
value = 1
"1 is equal to 1" if value == 1
# => 1 is equal to 1
"1 is not equal to 1" unless value == 1
# => nil