ループ処理で何もせずにカウンタだけ前に進める
何もせずに次のループに進む
ForループやDoループを書いているとき、
先頭で条件判定して、当てはまっていたら何もせずに次のループに進むことができたらいいのに
と思うことがちょいちょいある。
もちろん、たとえば、
リスト1
For i = 1 to hogehoge If foo = "bar" Then '処理1 '処理2 '処理3 '処理4 ・ ・ ・ ・ ・ End If Next
こんな風にしてやれば良いというのは分かっているんだけど、処理が結構な行数に及ぶ場合、Ifブロックがタテに長~くなるのはちょっとイヤなんですよねー。
For(Do)ループ先頭にガード節を置く
最近、ちょっとハマっている「ガード節」という考え方。
入り口のところで門前払いを食らわしてしまう、というのはIfブロックと同じなんですけどね。
たとえば、
リスト2
For i = 1 to hogehoge If foo = "bar" Then GoTo myJump '……(1) '処理1 '処理2 '処理3 '処理4 ・ ・ ・ ・ ・ myJump: '……(2) Next
こんな感じ。
(1)がガード節に当たる部分で、条件(この場合は変数fooの値が文字列「bar」だったらというもの)に当てはまっていたらNextの直前までワープさせる、というやり方で、処理1、処理2……をすっ飛ばしてiをインクリメントする、という処理を実現している。
おわりに
う~ん……。GoToの行き先になるラベルってインデントが効かない(強制的に左端に戻される)から、For~Nextブロックの視認性が落ちてしまうんだよなあ……。
何かいい方法があったら教えろください。