Возвращаемые значения из функции VB6 - PullRequest
1 голос
/ 04 декабря 2011

У меня есть функция VB6, которая выполняет удаление SQL. Функция возвращает логическое значение в зависимости от того, было ли удаление успешным:

Public Function Delete(ByVal RecordID As Integer)  As Boolean

On Error GoTo ErrorGenerated //Execute SQL delete

Delete = True

Exit Function

ErrorGenerated: Delete = False

End Function

Я где-то читал, что лучше вернуть целое число, которое определяет, было ли удаление успешным. Тем не менее, может быть только два результата от запуска функции из того, что я вижу, т.е. удалено или не удалено (не удалено, если выдается ошибка). Лучше ли вернуть целое число?

Ответы [ 4 ]

3 голосов
/ 04 января 2012

Я бы посоветовал вам лучше всего вернуть перечислимый тип; каждое значение для перечисления может затем объяснить вызывающей стороне, в чем заключается проблема, ясным и недвусмысленным образом, и новые причины ошибок могут быть добавлены позже по мере необходимости, не нарушая ничего. Что-то вроде ...

Public Enum DB_ERRS
    Success
    NoConnection
    FailedForThisReason
    FailedForThatReason
    FailedForOtherReason
    Failed
End Enum

Тогда все ваши функции доступа к базе данных могут возвращать значение этого типа ...

Public Function Delete(ByVal RecordID As Integer) As DB_ERRS

  On Error GoTo ErrorGenerated
  Execute SQL delete
  Delete = Success
  Exit Function

  ErrorGenerated:

  If Err.Number = this Then
     Delete = FailedForThisReason
  Else
     Delete = Failed
  End If

End Function 

Intellisense даже поможет вам заполнить их.

2 голосов
/ 04 декабря 2011

Это довольно субъективно.

Можно сказать, вернуть логическое значение, потому что оно так просто, как получается.

Еще одно сказать: вернуть целое число, потому что позже вы можете захотетьдобавьте третий статус, такой как «заархивированный», и он нарушит существующий код.

А кто-то еще скажет: «Откажитесь от кодов возврата в стиле C».Создайте sub, который ничего не возвращает, и вызовите исключение на случай, если вам потребуется указать ошибку.

Я лично предпочитаю исключения.Но решать вам.

0 голосов
/ 12 декабря 2011

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

0 голосов
/ 04 декабря 2011

С точки зрения размера integer - это 32-разрядное целое число со знаком, тогда как тип данных boolean на самом деле не имеет определенного размера.Однако это также зависит от контекста, в котором вы читали об использовании целых чисел вместо логических значений.

Для НЕКОТОРЫЕ разница не имеет значения при использовании его в качестве возвращаемого значения из функций.

Однако, это может быть чем-то предпочтительным в хранимых процедурах , если вы также рассматриваете возвращаемое значение из хранимой процедуры.Оценка логических значений (при преобразовании в числа) может привести к тому, что с ним будут обращаться как с битом (0 и 1). В любом случае, это скорее субъективный подход.Целые числа обеспечивают большую гибкость, а логические - ограничения и простоту.Что лучше?Я думаю, что это почти полностью зависит от вас, ваших предпочтений, ваших стандартов кодирования, стандартов кодирования вашей компании или чего-то еще.

Просто чтобы поделиться ссылкой на типы данных:

http://msdn.microsoft.com/en-us/library/aa383751(v=vs.85).aspx

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