アドベントカレンダー 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 件のコメント:
コメントを投稿