Я обычно стараюсь придерживаться идеи «Быстро проваливайся, терпишь неудачу».В основном выход из метода, как только первое необходимое условие не выполняется.
Public Function NuclearWar() as Boolean
If not is Foo() then return False
If (FooList is Nothing AndAlso FooList.Count = 0) then return False
(...) etc.
return True
End Function
Для меня понятнее читать, а не понижать каждую проверку и возвращать результат в конце.Если «целая вещь» терпит неудачу, если одно из условий ложно, такой ранний переход оказывается весьма полезным - до тех пор, пока вам не нужно проверять результаты других проверок, которые пропущены из-за возврата.
@ Comment
но если ваши условия разделены другой работой, которая должна быть выполнена, то одного вызова функции будет недостаточно.Или это будет?Что бы вы сделали
Ну, читабельность и чистый код (который включает в себя простое следование потоку управления) - одна из вещей, которые меня волнуют.Так что я бы, скорее всего, групповые условия, которые связаны друг с другом.Если условия разделены другой работой, я бы абстрагировал условия в классе, скажем LaunchConditions
.
Public Class LaunchCondition
Public Property IsLaunch As Boolean
' Add other properties you'd like to check
End Class
Public Class LaunchConditions
Private _launchConditions = New List(Of LaunchCondition)
Public ReadOnly Property CanLaunch As Boolean
Get
Return CheckConditions()
End Get
End Property
Public Sub AddCondition(ByVal condition As LaunchCondition)
' Add condition
End Sub
Public Sub RemoveCondition(ByVal condition As LaunchCondition)
' Add condition
End Sub
Private Function CheckConditions() As Boolean
' Your check logic
Return _launchConditions.Any(Function(x As LaunchCondition) Not x.IsLaunch)
End Function
End Class
Надеюсь, это даст вам некоторые идеи:)