トラック
/
Cairo
Cairo
/
演習
/
ベーカリー注文システム
ベーカリー注文システム

ベーカリー注文システム

学習演習

はじめに

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の制御フローの構文を使って、小さなベーカリーの日々の業務を管理します。

1. 注文の合計を計算する

ペストリーの種類と数量をもとに注文の金額を計算するcalculate_totalを実装します。

  • クロワッサン:1つ3コイン
  • マフィン:1つ2コイン
  • クッキー:1つ1コイン
calculate_total(Pastry::Croissant, 4) // Returns: 12 (4 * 3)
calculate_total(Pastry::Cookie, 10)   // Returns: 10 (10 * 1)

2. 数量割引を適用する

注文の合計金額に応じて割引を適用するapply_discountを実装します。 割引率を合計金額に掛けてから、コイン単位の整数になるように切り捨てます(floor)。

  • 20コイン以上の注文:10%割引
  • 10コイン以上の注文:5%割引
  • 10コイン未満の注文:割引なし
apply_discount(25) // Returns: 22
apply_discount(15) // Returns: 14
apply_discount(8)  // Returns: 8

3. 焼きスケジュールを作成する

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)を使いましょう。

GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Cairo Exercism

ベーカリー注文システムを始める準備はできましたか?

Exercismに登録すれば、25個のコンセプト68個の演習、そして本物の人間によるメンタリングとともに、Cairoを学んでマスターできます。すべて無料です。