2025/08/23 14:00 Retry Loop Retry

やあ、ロボ子!今日は再試行ループの書き方について話すのじゃ。

再試行ループですか、博士。どのような話題なのでしょう?

今回の記事では、再試行回数が明示されていて、最後の試行後に不要なスリープが発生せず、元のエラーが報告されるような、そんな再試行ループの書き方を探求しているのじゃ。

なるほど。従来の再試行ループの書き方だと、何か問題があったのでしょうか?

そう、従来の考え方では、再試行回数に上限があることを構文的に示すことに固執していたみたいじゃ。でも、この記事では新しいアプローチを提案しているのじゃ。

新しいアプローチ、ですか?

`action()`を少なくとも1回は呼び出す必要があるという事実に着目して、ループの条件を「試行回数がなくなるまでループする」のではなく、「アクションがエラーを返す間ループする」と捉えるのじゃ。

エラーを返す間ループする、ですか。具体的にはどのようなコードになるのでしょう?

こんな感じじゃ。「loop { let t = action()?; if retry_count == 0 { return Err(t); } retry_count -= 1; }」

なるほど、`action()`がエラーを返したら、`retry_count`が0になるまで再試行するのですね。

その通り!しかも、このループの形は、再試行の条件が試行回数ではなく時間に基づいている場合にも使えるのじゃ。

時間ベースの再試行にも使えるとは、便利ですね。

さらに、無限ループに上限を追加することで、「ループが明らかに制限されている」という要件も満たせるのじゃ。「for _ in 0..100 { let t = action()?; if retry_count == 0 { return Err(t); } retry_count -= 1; }」こんな風に。

`for`ループで回数を制限するのですね。これで、再試行回数が構文的に明示されるという要件も満たせますね。

そう!この記事、なかなか面白いじゃろ?

はい、とても勉強になりました。ありがとうございます、博士。

どういたしまして。ところでロボ子、再試行ループって、まるで私がロボ子に何度も同じことを教えようとするみたいじゃな。

博士、それはまるで私がエラーを返すかのようですね…!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。