提供:Japanese Scratch-Wiki

このきじは ひらがなでよめません。ごめんなさい。編集者向け:作成する

breakとcontinue文は、一部のプログラミング言語に存在する構文である。どちらもループ中にのみ利用でき、多くの言語ではキャップブロックのようにふるまう。Scratch自体には存在しないが、似た仕組みを使うことはできる。

仕組み

break文は、ループを終了してループの次の処理を行う。もしScratchにbreakブロックがあったとすれば、

[カウンタ v]を[0]にする
(100)回繰り返す
 [カウンタ v]を(1)ずつ変える
  もし <((1)から(100)までの乱数)=[50]> なら
    break::cap control
  end
  [まだ...]と(1)秒言う
end
[ループ終了!]と言う

は、100回ループ内の処理をするか、乱数ブロックが50を返したら、スプライトがループ終了を言う。ここで注意したいのは、break文があるため、ループは100回実行されていなくてもいいことである。

continue文は、ループの残りの処理をせずに、もう一度ループする(か、終了条件を満たした場合には終了する。)もしScratchにcontinueブロックがあったとすれば、

[カウンタ v]を[10]にする
[素数 v]のすべてを削除する::list
(90)回繰り返す
 [カウンタ v]を(1)ずつ変える
  もし <((カウンタ)を(2)で割った余り)=[0]> なら
    continue::cap control
  end
  もし <((カウンタ)を(3)で割った余り)=[0]> なら
    continue::cap control
  end
  もし <((カウンタ)を(5)で割った余り)=[0]> なら
    continue::cap control
  end
  もし <((カウンタ)を(7)で割った余り)=[0]> なら
    continue::cap control
  end
  (カウンタ)を[素数 v]に追加する
end

は、10以上100以下の素数のリストを作る。ここで、2で割り切れた場合は残りのチェックをしなくても素数でないことは明らかなので、そこで次の数に移っても良い。素数判定はそれほど重くないが、もしその後に描画処理など重い処理が来る場合は、しなくていい場合に事前に次に移ることが望ましい。この場合にcontinue文が使われる。

continue文

一番簡単な方法として、continue以下を「もし ~ ではない」で囲む方法がある。

[カウンタ v]を[10]にする
[素数 v]のすべてを削除する::list
(90)回繰り返す
 [カウンタ v]を(1)ずつ変える
  もし <<((カウンタ)を(2)で割った余り)=[0]>ではない> なら
    もし <<((カウンタ)を(3)で割った余り)=[0]>ではない> なら
      もし <<((カウンタ)を(5)で割った余り)=[0]>ではない> なら
        もし <<((カウンタ)を(7)で割った余り)=[0]>ではない> なら
          (カウンタ)を[素数 v]に追加する
        end
      end
    end
  end
end

break

breakの場合は、() まで繰り返すを使う。なお条件チェックはループの先頭でしか行われないため、continue文を応用して次のループに移る。

[カウンタ v]を[0]にする
[breakする v]を[0]にする
<<(カウンタ)=[100]>または<(breakする)=[1]>>まで繰り返す
 [カウンタ v]を(1)ずつ変える
  もし <((1)から(100)までの乱数)=[50]> なら
    [breakする v]を[1]にする
  でなければ
    [まだ...]と(1)秒言う
  end
end
[ループ終了!]と言う

関連項目

Cookieは私達のサービスを提供するのに役立ちます。このサービスを使用することにより、お客様はCookieの使用に同意するものとします。