Цепочка функций в зависимости от логического результата - PullRequest
2 голосов
/ 07 июня 2010

На самом деле это просто вопрос эффективности. Мне интересно знать, есть ли более эффективный или логичный способ, которым люди используют такой сценарий.

В моем приложении asp.net яя запускаю скрипт для генерации нового проекта, мой код на верхнем уровне выглядит следующим образом:

Dim ok As Boolean = True
    ok = createFolderStructure()
    If ok Then ok = createMDB()
    If ok Then ok = createProjectConfig()
    If ok Then ok = updateCompanyConfig()

Я создаю логическое значение, и каждая функция возвращает логический результат, следующая функция в этой цепочке будет выполняться только в том случае, еслипредыдущий был успешным.Я делаю это, потому что приложение asp.net будет продолжать работать в течение жизненного цикла страницы, если не будет необработанного исключения, и я не хочу, чтобы все мое приложение было испорчено, если что-то в цепочке пойдет не так (многокопирование и удаление файлов и т. д. в этом примере).

Мне было просто интересно, как другие люди справляются с этим сценарием?в одной строке, если заявление vb.net достаточно лаконично, но мне интересно, есть ли лучший способ?

Ответы [ 3 ]

2 голосов
/ 07 июня 2010

Вы можете отбросить логическое значение все вместе

If createFolderStructure() Then
If createMDB() Then
If createProjectConfig() Then
If updateCompanyConfig()

, но я должен согласиться, что использование исключений - лучший способ справиться с этими ситуациями.

2 голосов
/ 07 июня 2010

Обычно функция не должна возвращать true / false на основании своего результата - это считается старомодным.Здесь лучше использовать блок try / catch, где функция выдает исключение в случае ошибки.То есть, конечно, если предположить, что ошибки возникают только в особых случаях:

Try
    createFolderStructure()
    createMDB()
    createProjectConfig()
    updateCompanyConfig()
    ''// ...
Catch ioExeption as IOException
    ''// handle it
End Try
1 голос
/ 07 июня 2010

Коби показал вам способ сделать это.Если вам действительно нужно использовать результаты булевых функций, вы можете связать их с помощью оператора AndAlso .

Dim ok As Boolean
ok = createFolderStructure() 
    AndAlso createMDB()
    AndAlso createProjectConfig()
    AndAlso updateCompanyConfig()

Эти выражения вычисляются лениво, т. Е. Если одна функция возвращает ложь, остальныевыражения не оценивается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...