繰り返し構文

繰り返し構文を利用することで、退屈な毎日のルーチンワークを機械でオート制御出来るようにはなりませんが、Kuinで記述するプログラムの、似たような繰り返し記述を、たった数行で表現できるようになります。




繰り返し構文概要

繰り返し構文とは、その名の通り指定した処理を何度も繰り返し実行させる命令のことです。
例えば、1から5までの数字をデバッグウインドウに出力させるコードを書くとします。
繰り返し構文を知らない人は以下のようなコードを書くでしょう。
  1. func Main()
  2. var i : int :: 0
  3.  
  4. do i :: i + 1 {*1}
  5. do Dbg@Log(i.ToStr()) {1がデバッグウインドウに出力される} {*2}
  6. do i :: i + 1
  7. do Dbg@Log(i.ToStr()) {2がデバッグウインドウに出力される}
  8. do i :: i + 1
  9. do Dbg@Log(i.ToStr()) {3がデバッグウインドウに出力される}
  10. do i :: i + 1
  11. do Dbg@Log(i.ToStr()) {4がデバッグウインドウに出力される}
  12. do i :: i + 1
  13. do Dbg@Log(i.ToStr()) {5がデバッグウインドウに出力される}
  14. end func
上記のコードを見ると、{*1}と{*2}が何度も書かれていることが分かると思います。
このコードは1から5までを出力させるコードなのでこの行数で済んでいますが、1から1000、1から10000までを出力させるコードを書く場合はどうでしょうか。
このコードのように{*1}と{*2}を何度も繰り返し書きますか?
それだと非常に効率が悪いです。
このような同じことを繰り返す部分をどうにかして短くしたい。
そこで使うのが繰り返し構文です。

Kuinにはwhile文、for文、foreach文の3つの繰り返し構文があります。
今回はその中の1つのwhile文を使って1から5までを出力するコードを記述します。
  1. func Main()
  2. var i : int :: 0
  3.  
  4. while (i < 5)
  5. do i :: i + 1
  6. do Dbg@Log(i.ToStr())
  7. end while
  8. end func
トータルで14行だったコードが8行に凝縮されました。
たった6行しか変わらないの?と思う方がいるかもしれませんが、 while (i < 5) の5の部分を1000に変えてみてください。
コードは8行のままで、1から1000までの数字を出力することができます。
(繰り返し構文を使わずに書いた場合、2000行相当のコードになります。)

繰り返し構文の利便性は分かって頂けたでしょうか。
次項ではwhile文、for文、foreach文それぞれの繰り返し構文の詳しい使い方を記述します。

補足
do i :: i + 1
は、
do i :+ 1
と表すこともできます。
:+については○○○(代入演算子の項目へのリンク)をご覧ください。

while文

説明

while文とは、ある条件が満たされている間だけ指定された処理を繰り返し実行する命令のことです。
while文は、Kuinでゲームを作る際に必ず使用する命令の1つだと言っても過言ではないでしょう。[要出典]
while文とif文を組み合わせることにより、様々なアニメーションを作ることができます。

記述方法

  1. func Main()
  2. while(条件式(bool型))
  3. {条件式がtrueであり続ける間、繰り返したい内容}
  4. end while
  5. while(条件式(bool型),skip)
  6. {初回実行時及び条件式がtrueであり続ける間、繰り返したい内容}
  7. end while
  8. end func

サンプルコード(Ver1.00)

  1. func Main()
  2. var rx : int :: 0 {四角形のx座標}
  3. var bl : bool :: true {右に移動するか左に移動するかの判定}
  4.  
  5. while (true) {条件にtrueを指定した場合、無限ループになります}
  6. do Kuin@Act()
  7. do Draw@Rect(rx $ float, 400 $ float, 50.0, 50.0, 1.0, 1.0, 1.0, 1.0) {50*50の白い四角形を指定座標に表示}
  8.  
  9. if (rx < 0) {四角形が画面の左端に到達したとき}
  10. do bl :: true {四角形を右に移動するようにする}
  11. end if
  12. if (rx > 1550) {四角形が画面の右端に到達したとき}
  13. do bl :: false {四角形を左に移動するようにする}
  14. end if
  15.  
  16. if (bl) {判定が右のとき}
  17. do rx :+ 5 {四角形を右に5進める}
  18. end if
  19. if (!bl) {判定が左のとき}
  20. do rx :- 5 {四角形を左に5進める}
  21. end if
  22. end while
  23. end func

for文

説明

for文とは、while文と同じように指定された処理を繰り返し実行します。
ただしwhile文とは違って、ある変数を宣言・初期化し、その変数が指定した最大値になるまで繰り返しの度に1ずつ追加していきます。
個数の決まった[](array)型の変数と相性がよく、また回数が確実に決まった繰り返し処理を行いたい場合によく使われます。

記述方法

  1. func Main()
  2. for 変数名(初期値(int型),最大値(int型))
  3. {変数の値が初期値から最大値の範囲の間、繰り返したい内容}
  4. end for
  5. end func

サンプルコード(Ver1.00)

  1. func Main()
  2. {掛け算九九をの結果を表示するプログラム}
  3. var nums: [][]int
  4. var rowmax: int :: 9 {配列の最大行数}
  5. var colmax: int :: 9 {配列の最大列数}
  6.  
  7. do nums :: #[rowmax+1][]int {配列の行数を設定}
  8.  
  9. for i( 0,rowmax ) {0からrowmax(9)まで繰り返す}
  10. do nums[i] :: #[colmax+1]int {配列の列数を設定}
  11. for j( 0,colmax ) {0からcolmax(9)まで繰り返す}
  12. do nums[i][j] :: i * j {配列に掛け算の結果を格納}
  13. end for
  14. end for
  15.  
  16. for i( 0,rowmax ) {0からrowmax(9)まで繰り返す}
  17. for j( 0,colmax ) {0からcolmax(9)まで繰り返す}
  18. do Dbg@Log( i.ToStr() ~ " * " ~ j.ToStr() ~ " = " ~ nums[i][j].ToStr() ) {配列に格納されている数値を表示}
  19. end for
  20. end for
  21. end func

foreach文

説明


記述方法