Cairo의 제어 흐름을 사용하면 조건과 반복에 따라 프로그램의 실행 경로를 제어할 수 있어요.
조건에 따라 코드를 실행하려면 if 표현식을 사용해요:
let number = 42;
if number > 0 {
println!("Positive number");
} else if number < 0 {
println!("Negative number");
} else {
println!("Zero");
}
if는 표현식이기 때문에 값을 반환할 수 있어요:
let result = if condition { 5 } else { 10 };
코드를 반복하려면 loop를 사용해요.
루프는 멈추지 않는 한 계속 실행돼요. 조건이 충족되면 break로 루프를 종료해요.
let mut counter = 0;
loop {
if counter == 5 {
break;
}
println!("Counter: {}", counter);
counter += 1;
}
루프는 break를 사용해 값을 반환할 수 있어요:
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2; // Returns 20
}
};
다음 반복으로 건너뛰려면 continue를 사용해요:
let mut i = 0;
loop {
i += 1;
if i % 2 == 0 {
continue; // Skip even numbers
}
if i > 10 {
break;
}
println!("{}", i); // Only prints odd numbers
}
이 연습 문제에서는 Cairo의 제어 흐름 구문을 사용해 작은 빵집의 일상 운영을 관리해요.
페이스트리 종류와 수량을 바탕으로 주문 비용을 계산하는 calculate_total을 구현해요:
calculate_total(Pastry::Croissant, 4) // Returns: 12 (4 * 3)
calculate_total(Pastry::Cookie, 10) // Returns: 10 (10 * 1)
주문 총액을 기준으로 할인을 적용하는 apply_discount를 구현해요.
총액에 할인율을 적용한 다음, 가장 가까운 정수 코인으로 내림해요(floor).
apply_discount(25) // Returns: 22
apply_discount(15) // Returns: 14
apply_discount(8) // Returns: 8
하루치 베이킹 계획을 만드는 baking_schedule을 구현해요.
빵집은 한 시간에 주문 5개씩 묶음 단위로 구워요:
baking_schedule(18) // Returns: [5, 5, 5, 3] (3 full batches + 3 remaining)
baking_schedule(10) // Returns: [5, 5] (2 full batches)
baking_schedule(3) // Returns: [3] (1 partial batch)
각 문제를 효율적으로 해결하려면 적절한 제어 흐름 구문(if/else, loop)을 사용해요.