エラーが発生しました
このエラーの親方法を伝えるための最善の方法あなたが親メソッドがエラーを知りたいされているのでどのような)、そして、それはあなたがID
が有効であるとUser
ことを確認していないことを縫い目GetUser
メソッドを呼び出す前に期限切れになっていません。右?
関数に渡すパラメータが有効かどうかわからない場合は、例外を使用することは正当ではないため、代わりにエラー情報を返す必要があります。
エラー情報は、Scala、Go、Rustの言語に似た、より機能的な方法で返すことができます。
関数が
public enum UserError
InvalidUserID
UserExpired
end enum
がユーザーをとる関数を作成することができ、エラーの列挙を作成してエラーまたは値
public class Either(of ErrorType, ValueType)
public readonly Success as boolean
public readonly Error as ErrorType
public readonly Value as ValueType
public sub new(Error as ErrorType)
me.Success = False
me.Error = Error
end sub
public sub new(Value as ValueType)
me.Success = True
me.Value = Value
end sub
end class
のいずれかを返すために、一般的なクラスを作成します。 IDを引数として返し、エラーまたはユーザーを返します。
function GetUser(ID as integer) as Either(of UserError, User)
if <business logic to find a user failed> then
return new Either(of UserError, User)(UserError.InvalidUserID)
end if
if <user expired> then
return new Either(of UserError, User)(UserError.UserExpired)
end if
return new Either(of UserError, User)(User)
end function
エラーの発信者(親)メソッドチェックで
とビジネスロジック
dim UserID = 10
dim UserResult = GetUser(10)
if UserResult.Success then
rem apply business logic to UserResult.Value
else
rem apply business logic to UserResult.Error
end if
注意を適用する:あなたは正確に同じコードの量を取得する例外を使用してこのコードを書き換える場合。
**試し**、**キャッチ**、**投げ**、最初のものは最高です.. – NetStarter
[この質問を見る](http://stackoverflow.com/questions/3926086/handling-既知のエラーおよびエラーメッセージの方法?rq = 1)。 –
私は今なぜですか? –