繰り返し構文

「繰り返し構文」の編集履歴(バックアップ)一覧に戻る

繰り返し構文 - (2013/09/24 (火) 16:54:16) のソース

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

----
#contents(fromhere=true)
----

*繰り返し構文概要
>繰り返し構文とは、その名の通り指定した処理を何度も繰り返し実行させる命令のことです。&br()例えば、1から5までの数字をデバッグウインドウに出力させるコードを書くとします。&br()繰り返し構文を知らない人は以下のようなコードを書くでしょう。
#highlight(linenumber){{func Main()
	var i : int :: 0

	do i :: i + 1 {*1}
	do Dbg@Log(i.ToStr()) {1がデバッグウインドウに出力される} {*2}
	do i :: i + 1
	do Dbg@Log(i.ToStr()) {2がデバッグウインドウに出力される}
	do i :: i + 1
	do Dbg@Log(i.ToStr()) {3がデバッグウインドウに出力される}
	do i :: i + 1
	do Dbg@Log(i.ToStr()) {4がデバッグウインドウに出力される}
	do i :: i + 1
	do Dbg@Log(i.ToStr()) {5がデバッグウインドウに出力される}
end func}}
>上記のコードを見ると、{*1}と{*2}が何度も書かれていることが分かると思います。&br()このコードは1から5までを出力させるコードなのでこの行数で済んでいますが、1から1000、1から10000までを出力させるコードを書く場合はどうでしょうか。&br()このコードのように{*1}と{*2}を何度も繰り返し書きますか?&br()それだと非常に効率が悪いです。&br()このような同じことを繰り返す部分をどうにかして短くしたい。&br()そこで使うのが繰り返し構文です。&br()&br()Kuinにはwhile文、for文、foreach文の3つの繰り返し構文があります。&br()今回はその中の1つのwhile文を使って1から5までを出力するコードを記述します。
#highlight(linenumber){{func Main()
	var i : int :: 0

	while (i < 5)
		do i :: i + 1
		do Dbg@Log(i.ToStr())
	end while
end func}}
>トータルで14行だったコードが8行に凝縮されました。&br()たった6行しか変わらないの?と思う方がいるかもしれませんが、 while (i < 5) の5の部分を1000に変えてみてください。&br()コードは8行のままで、1から1000までの数字を出力することができます。&br()(繰り返し構文を使わずに書いた場合、2000行相当のコードになります。)&br()&br()繰り返し構文の利便性は分かって頂けたでしょうか。&br()次項ではwhile文、for文、foreach文それぞれの繰り返し構文の詳しい使い方を記述します。&br()&br()補足&br()do i :: i + 1&br()は、&br()do i :+ 1&br()と表すこともできます。&br():+については○○○(代入演算子の項目へのリンク)をご覧ください。
*&aname(while文)while文
**&aname(while文説明)説明
>while文は、ある条件が満たされている間だけ指定された処理を繰り返し実行する命令のことです。&br()Kuinでゲームを作るときにwhile文は必ずと言っていいほど使用します。[要出典]&br()while文とif文を組み合わせることにより、様々なアニメーションを作ることができます。
**&aname(while文記述方法)記述方法
#highlight(linenumber){{func Main()
	var rx : int :: 0 {四角形のx座標}
	var bl : bool :: true {右に移動するか左に移動するかの判定}

	while (true) {条件にtrueを指定した場合、無限ループになります}
		do Kuin@Act()
		do Draw@Rect(rx $ float, 400 $ float, 50.0, 50.0, 1.0, 1.0, 1.0, 1.0) {50*50の白い四角形を指定座標に表示}

		if (rx < 0) {四角形が画面の左端に到達したとき}
			do bl :: true {四角形を右に移動するようにする}
		end if
		if (rx > 1550) {四角形が画面の右端に到達したとき}
			do bl :: false {四角形を左に移動するようにする}
		end if

		if (bl) {判定が右のとき}
			do rx :+ 5 {四角形を右に5進める}
		end if
		if (!bl) {判定が左のとき}
			do rx :- 5 {四角形を左に5進める}
		end if
	end while
end func}}

*&aname(for文)for文
**&aname(for文説明)説明
>
**&aname(for文記述方法)記述方法
>

*&aname(foreach文)foreach文
**&aname(foreach文説明)説明
>
**&aname(foreach文記述方法)記述方法
>