人気ブログランキング | 話題のタグを見る

[VBScript] 禁断の「Goto」ステートメントを実現する

どーもボキです。

初期化・終了処理をシンプルするためのGotoならば積極的に使うべき

    禁忌としてGotoを使わないという考え方もあるようですね。というか、禁忌とした意図や背景を理解せずに「Goto=悪」ととらえている人も多そうです。
    ボキは、用途を限定するならば積極的に使うべき、と考えています。
[VBScript] 禁断の「Goto」ステートメントを実現する_a0021757_13303487.png

サンプルソース

    Exit Do(≒GoTo)を活用した方が圧倒的に読みやすいことが分かると思います。

    Exit Do(≒GoTo)を活用したもの

      ' ------------------------------------------------------------------------------
      ' vbCommon.vbsデバッグ
      ' ------------------------------------------------------------------------------
      If objFS.GetFileName(WScript.ScriptFullName) = "vbCommon.vbs" Then
      ::::Do
      If InStr(LCase(WSCript.FullName), "wscript") = 0 Then Exit Do
      If Not Ping(サーバIP) Then Exit Do

      Dim fpth: fpth = "\" & サーバIP & "フォルダパスbCommon.vbs"
      If Not objFS.FileExists(fpth) Then Exit Do
      If objFS.GetFile(fpth).DateLastModified <= objFS.GetFile(WScript.ScriptFullName).DateLastModified Then Exit Do

      If objWS.Popup(WScript.ScriptFullName & "を更新します。",5, "プログラム更新", vbOkCancel + vbInformation) <> vbCancel Then
      objFS.CopyFile fpth, WScript.ScriptFullName, True
      End If
      ::::Loop Until 1
      SetScriptHost("cscript")

      dprintf "デバッグモード"
      End If


    Exit Do(≒GoTo)を活用せず、If文のみで表現したもの

      ' ------------------------------------------------------------------------------
      ' vbCommon.vbsデバッグ
      ' ------------------------------------------------------------------------------
      If objFS.GetFileName(WScript.ScriptFullName) = "vbCommon.vbs" Then
      If InStr(LCase(WSCript.FullName), "wscript") <> 0 Then
      ' WScriptホストでの実行
      If Ping(サーバIP) Then
      ' サーバにPingが通る
      Dim fpth: fpth = "\" & サーバIP & "フォルダパスbCommon.vbs"
      If objFS.FileExists(fpth) Then
      ' サーバにファイルが存在する
      If objFS.GetFile(fpth).DateLastModified > objFS.GetFile(WScript.ScriptFullName).DateLastModified Then
      ' サーバのファイルの方が新しい
      If objWS.Popup(WScript.ScriptFullName & "を更新します。",5, "プログラム更新", vbOkCancel + vbInformation) <> vbCancel Then
      ' キャンセルボタンが押されなかった(タイムアウトも含む)
      objFS.CopyFile fpth, WScript.ScriptFullName, True
      End If
      End If
      End If
      End If
      End If
      SetScriptHost("cscript")

      dprintf "デバッグモード"
      End If

2020/5/16 16:08掲載記事の更新
にほんブログ村 IT技術ブログへ
にほんブログ村
by yozda | 2020-12-31 13:11 | プログラミング | Comments(0)
カレンダー
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31