Ruby에서 가장 흔한 숫자 유형 두 가지는 다음과 같아요:
-6, 0, 1, 25, 976, 500000 등이 있어요.-2.4, 0.1, 3.14, 16.984025, 1024.0 등이 있어요.정수와 실수는 각각 Integer와 Float 클래스로 구현돼요.
이 클래스들에는 값을 서로 변환해 주는 메서드가 있어요. Integer는 정수 단위까지 정확한 반면, Float는 소수 단위까지 정밀하게 표현할 수 있어요:
Integer#to_f: 새 실수로 변환해요Float#ceil: 가장 가까운 정수로 올림해요Float#floor: 가장 가까운 정수로 내림해요Float#round: 가장 가까운 정수로 반올림해요Float#to_i: 가장 가까운 정수로 버림해요Ruby에는 흐름 제어 표현식이라는 것이 있는데, 프로그램이 실행되는 방식을 제어하는 데 사용되며 truthy 또는 falsey 값을 가져요. truthy 또는 falsey 값을 만들어 내는 데 사용할 수 있는 연산자도 있는데, 이를 비교 연산자라고 해요.
어떤 코드가 실행되고 어떤 코드가 실행되지 않을지, 즉 어느 분기가 실행될지를 제어하는 주요 제어 표현식이 두 가지 있어요.
그 두 가지는 if와 unless 표현식이에요.
비교 연산자는 값을 비교하고 true 또는 false 값을 반환하는 데 사용돼요.
다음 연산자들은 같은 타입의 두 값을 비교해야 해요.
값의 타입이 다르면 컴파일러가 오류를 발생시켜요.
다음은 연산자 목록과, 이들이 true 값을 내놓는 예시예요:
| 메서드 | 설명 | 예시 |
|---|---|---|
| < | 보다 작음 | 4 < 5 |
| <= | 작거나 같음 | 4 <= 4 |
| > | 보다 큼 | 3 > 1 |
| >= | 크거나 같음 | 2 >= 2 |
같음과 같지 않음 연산자는 앞서 언급한 연산자들과 달리 어떤 타입의 값이든 비교하는 데 사용할 수 있어요.
== 연산자는 두 값이 같은지 확인하는 데 사용되며, 값의 타입까지 확인해요.
!=도 같은 방식으로 동작하지만, 값이 같지 않으면 true를, 같으면 false를 반환해요.
다음은 같음과 같지 않음 연산자 목록과, 이들이 true 값을 내놓는 예시예요:
| 메서드 | 설명 | 예시 |
|---|---|---|
| == | 같음 | 4 == 4 |
| != | 같지 않음 | 5 != 4 |
if문if문은 주어진 조건이 "truthy"인지 "falsey"인지 확인하는 데 사용돼요.
조건이 truthy이면 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문unless문은 if문과 아주 비슷하게 동작하지만, 조건이 falsey일 때 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문else문은 if문과 함께 사용할 수 있어요.
else문은 if 분기가 실행되지 않았을 때 실행돼요.
value = 1
if value == 1
"1 is equal to 1"
else
"1 is not equal to 1"
end
# => "1 is equal to 1"
if"문elsif문은 if문과 함께 사용할 수 있어요.
elsif문은 if 분기가 실행되지 않았고 elsif문의 조건이 truthy일 때 실행돼요.
elsif문은 여러 개를 이어 붙일 수 있고, 처음으로 truthy인 조건이 실행돼요.
if문 끝에 else문을 둘 수도 있는데, 앞선 문들이 모두 참이 아니었을 때 실행돼요.
value = 1
if value != 1
"1 is not equal to 1"
elsif value > 2
"1 is greater than 2"
else
"1 is not equal to 1 and 1 is not greater than 2"
end
# => "1 is not equal to 1 and 1 is not greater than 2"
이 연습 문제에서는 자동차 공장의 조립 라인 생산량을 분석하는 코드를 작성해요.
조립 라인의 속도는 0(꺼짐)에서 10(최대)까지 설정할 수 있어요.
가장 느린 속도(1)에서는 한 시간에 221대의 자동차를 생산해요.
생산량은 속도에 따라 선형적으로 증가해요.
따라서 속도를 4로 설정하면 한 시간에 4 * 221 = 884대의 자동차를 생산해야 해요.
하지만 속도가 높아질수록 결함이 있는 자동차가 생산될 가능성도 커지고, 그런 자동차는 폐기해야 해요.
다음 표는 속도가 성공률에 어떤 영향을 주는지 보여줘요.
1에서 4까지: 성공률 100%.5에서 8까지: 성공률 90%.9: 성공률 80%.10: 성공률 77%.두 가지 작업이 있어요.
성공률을 고려해서 조립 라인의 시간당 생산량을 계산하는 AssemblyLine#production_rate_per_hour 메서드를 구현해요.
반환되는 값은 Float의 인스턴스라는 점에 유의해요.
AssemblyLine.new(6).production_rate_per_hour
#=> 1193.4
분당 몇 대의 완성된, 정상 작동하는 자동차가 생산되는지 계산하는 AssemblyLine#working_items_per_minute 메서드를 구현해요.
반환되는 값은 Integer의 인스턴스라는 점에 유의해요.
AssemblyLine.new(6).working_items_per_minute
#=> 19
Exercism에 가입하고 Ruby 트랙을 개념 21개연습 문제 121개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.