« 冗長構成について | トップページ | 謎の常駐プログラム »

2006.09.14

ForとWhileの違いを考える

必ずお世話になるデータ制御構造としてループ処理があるわけだが、実装レベルでFORで書くかWHILEで書くか、というのは癖みたいなものなのか、どのくらい考えて書いているだろうか?

がるの健忘録:そういえばな問い

にてこういう面白い思考実験が提案されていて、ふと考え込んでしまった。

初めてプログラムを書いたときに、どうしてもループ処理の使い方がわからなかった、というのが正直なところだった。
さらにWHILEとFORの違いがよくわからなかったというのはその頃のことから。
単なるとっつきから行くと「WHILEの方がわかりやすくFORの方がイメージできない」のが私のケースだった。
FOR文でのカウンタの取り扱いがインクリメント演算とあいまって、わからなかったらしい。(らしいというのもどうかと思うが、ずいぶん昔の話なので(^^;;;;)
たぶん最初に書いたのは

DO WHILE hogehoge <> "ABC"
 なんか処理
LOOP
みたいなやつだったと思う(by VB)。
WHILEループ内にさらによくわからんIF分岐がたくさんあって、特定の条件だと"ABC"が代入されてループを終了するような処理じゃなかったかと。
はっきりいっていまだったらループ使わずにswitch使います(爆)
ただ、この処理はFORループでは絶対に書くことができなかったのは間違いないわけで、このあたりがFORとWHILEとの違いのポイントなのかなあ。

自分の実際のコーディング作法を考えると、あるデータセットをSELECTで抜いてきて、カーソルの頭から最終行まで処理するようなループを書く時には現在ではSELECT結果行数を別途取得し、その範囲内でFORループを回すように書くのがほとんど。全件対象にするんだからNOT EOFみたいな条件でWHILEを回しても対応できるのではあるが。
たしか昔Accessで少しでも処理を早くするためにはWHILEよりもFORの方がいい、というのを聞いてはじめたのがそのまましっくりきて使っている、という感じ。実際のループ処理を書く時には最終行まで処理するケースばかりではないので、よけいにFORの方が使い易いように思う。

というところから

FORは処理したい対象がスカラー的に並んでいるときに使い、WHILEはスカラーかどうかよくわからないときに使う
というのが自分なりの正解かなあ?

|

« 冗長構成について | トップページ | 謎の常駐プログラム »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/2022/11880455

この記事へのトラックバック一覧です: ForとWhileの違いを考える:

« 冗長構成について | トップページ | 謎の常駐プログラム »