whileで処理待ちするときの書き方
Discussion
解決したいこと
レビューをしている際に、何らかの処理待ちをする while ループを書くときにパターンがあるという話をしてしまったのですが、振り返ると経験則でしかありませんでした。例外であるとか、他の書き方のパターンや考え方をご存知であればご教示頂きたいです。
その時に示したパターン(PowerShell)は以下の通り。
# (1)
$result = command
while ($result) {
# (3)
if ($timeout -gt 10) { break }
$timeout++
sleep 1
# (2)
$result = command
}
# (4)
if ($timeout -gt 10) {
# ...
}
(1)
と (2)
は何らかの処理状態を取得するコマンドであり、全く同じコードになります。
(3)
と (4)
はタイムアウトの処理と、タイムアウトしたかどうかを確認する処理であり、全く同じ条件となります。
自分で考えたこと
(4)
でやりたいことが少なければ (3)
の位置で処理してしまうパターンがあるかもしれません。(4)
で色々やりたいときは、処理待ちのループであることがわかりにくくなるので、ループの外に出す方が汎用的だと思います。
原始的な制御文なので好きなように書いたら良い気もしますが、自身の現場ではこういう書き方にするよう指摘されるなどの情報を頂戴できればと思います。