関数の全長を実行するのではなく、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ステートメントが置かれている場所でコードの実行を中断する方法はありますか?
はい、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
従来の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
指摘されているようにcan use Exit Function
ただし、注意が必要です。あなたが与えた簡単な例では、他のコードがとにかく実行されなかったであろう利点は実際にはありません。
コードのチャンク全体に出口点を配置すると、追跡とデバッグが困難になる可能性があります。より深刻なことに、それはコードへのその後の変更をより困難にし、より広範な変更を必要とし、したがってリスクを増大させる可能性があります。したがって、そのようなパターンは「悪臭」と見なされるべきです。
合理的に受け入れられる典型的なシナリオは、コードの本体を続行する前に、コードが入力パラメーターに対していくつかのアサーションを行う場合です。それ以外に、あなたはそれをする本当に、本当に正当な理由を表現することができるはずです。
「そうすると、If
構造が増え、コード内のIDが過剰に増える」と言うかもしれません。その場合、関数にはとにかくコードが多すぎるため、より小さな関数にリファクタリングする必要があります。