アドベントカレンダー 12日目
みなさーん。Goto使ってますかぁ〜♪
はい。じゃんじゃん使ってますね。
いやー便利便利。
Goto使わないとかないですよねぇ。
とかいうと、
スパゲッティーつくりたきゃ、料理人になれよ!
と罵声を浴びてしまいそうになりますが・・・
javascriptならbreak, continue
perlならlast, next
vb.netでさえexit, continue
などがあるというのに…
残念ながらVBAでは次のループへに該当するものがない…
そこでgotoを変わりに使おうよ。
って話ですよ。
するとね。
gotoなんてスパゲッティーの温床!
gotoなんて使わずに表現できるからそうしなさい!
なんて言うわけですよ。
あの・・・
本来のあるべきコードの解釈をねじまげてまで、
gotoを使わないことに必死になることはないと思うんですよね。
そもそも、にっくきはスパゲッティーなコーディングなわけであって
他の言語のループ制御と同等の使い方と限定したならば
特に問題は発生しないと思うんですけどね。
例えば、ファイルを開き1行ずつ処理する場合
開く→1行データ取得→必要データか判定→必要データを所定の処理をして取得
と考えた場合以下のようにかける。
ポイントは、不要データのコードがかかれている部分
必要データのコードが書かれている部分がネストされることなく
はっきりとわかるようになっていること。
可読性を犠牲にしてまで、スパゲッティー呪文に取り憑かれて
つかわないようにするのはどうなんだろうねぇ。。
と思う今日この頃でした。
みなさーん。Goto使ってますかぁ〜♪
はい。じゃんじゃん使ってますね。
いやー便利便利。
Goto使わないとかないですよねぇ。
とかいうと、
スパゲッティーつくりたきゃ、料理人になれよ!
と罵声を浴びてしまいそうになりますが・・・
javascriptならbreak, continue
perlならlast, next
vb.netでさえexit, continue
などがあるというのに…
残念ながらVBAでは次のループへに該当するものがない…
そこでgotoを変わりに使おうよ。
って話ですよ。
するとね。
gotoなんてスパゲッティーの温床!
gotoなんて使わずに表現できるからそうしなさい!
なんて言うわけですよ。
あの・・・
本来のあるべきコードの解釈をねじまげてまで、
gotoを使わないことに必死になることはないと思うんですよね。
そもそも、にっくきはスパゲッティーなコーディングなわけであって
他の言語のループ制御と同等の使い方と限定したならば
特に問題は発生しないと思うんですけどね。
例えば、ファイルを開き1行ずつ処理する場合
開く→1行データ取得→必要データか判定→必要データを所定の処理をして取得
と考えた場合以下のようにかける。
ポイントは、不要データのコードがかかれている部分
必要データのコードが書かれている部分がネストされることなく
はっきりとわかるようになっていること。
- Sub SampleCode(ByVal FilePath As String)
- Dim FSO As Object
- Dim FH As Object
- Dim OneLine As String
- '** Objectの生成 **
- Set FSO = CreateObject("Scripting.FileSystemObject")
- Set FH = FSO.OPenTextFile(DataFilePath, 1)
- Do While Not .AtEndOfStream
- '■1行ずつ取得する
- OneLine = .ReadLine
- '■特定の条件を満たさない行はデータとして取得しない
- '空行は次のループへ
- If Trim(OneLine) = "" Then GoTo NextDoLoop
- '○○を含む行はヘッダー行なので除外する
- If 0 < InStr(OneLine, "○○") Then GoTo NextDoLoop
- '××を含む行はフッター行なので除外する
- If 0 < InStr(OneLine, "××") Then GoTo NextDoLoop
- '■上記で除外すべきデータを除いているので
- ' ○×△なデータだけになっている
- '以下いろんな処理
- NextDoLoop:
- Loop
- FH.Close
- Set FH = Nothing
- Set FSO = Nothing
- End Sub
0 件のコメント:
コメントを投稿