web-dev-qa-db-ja.com

クラシックの関数から早期に戻るASP

関数の全長を実行するのではなく、classic ASPの関数から早期に戻る方法はありますか?たとえば、関数があるとしましょう...

Function MyFunc(str)
  if (str = "ReturnNow!") then
    Response.Write("What up!")       
  else
    Response.Write("Made it to the end")     
  end if
End Function

そのように書けますか...

Function MyFunc(str)
  if (str = "ReturnNow!") then
    Response.Write("What up!")       
    return
  end if

  Response.Write("Made it to the end")     
End Function

もちろん、従来のASPでは実行できないreturnステートメントに注意してください。そのreturnステートメントが置かれている場所でコードの実行を中断する方法はありますか?

22
Rob Segal

はい、exit functionを使用します。

Function MyFunc(str)
  if str = "ReturnNow!" then
    Response.Write("What up!")       
    Exit Function
  end if

  Response.Write("Made it to the end")     
End Function

私は通常、関数から値を返すときにこれを使用します。

Function usefulFunc(str)
   ''# Validate Input
   If str = "" Then
      usefulFunc = ""
      Exit Function
   End If 

   ''# Real function 
   ''# ...
End Function
36
C. Ross

従来のASPでは、Exit Functionを使用する必要があります。

Function MyFunc(str)
  if (str = "ReturnNow!") then
    Response.Write("What up!")       
    Exit Function
  end if

  Response.Write("Made it to the end")     
End Function
4
Oded

指摘されているようにcan use Exit Functionただし、注意が必要です。あなたが与えた簡単な例では、他のコードがとにかく実行されなかったであろう利点は実際にはありません。

コードのチャンク全体に出口点を配置すると、追跡とデバッグが困難になる可能性があります。より深刻なことに、それはコードへのその後の変更をより困難にし、より広範な変更を必要とし、したがってリスクを増大させる可能性があります。したがって、そのようなパターンは「悪臭」と見なされるべきです。

合理的に受け入れられる典型的なシナリオは、コードの本体を続行する前に、コードが入力パラメーターに対していくつかのアサーションを行う場合です。それ以外に、あなたはそれをする本当に、本当に正当な理由を表現することができるはずです。

「そうすると、If構造が増え、コード内のIDが過剰に増える」と言うかもしれません。その場合、関数にはとにかくコードが多すぎるため、より小さな関数にリファクタリングする必要があります。

3
AnthonyWJones