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
1日の焼き計画を作るbaking_scheduleを実装します。
ベーカリーは1時間に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)を使いましょう。