• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

"Правильный" стиль кодирования...

  • Автор темы fedotxxl
  • Дата начала
F

fedotxxl

Часто ли вы используете Exit sub? и правильно ли это?
Как бы вы поступили:
Код:
if nd is nothing then Exit Sub
или же
Код:
if not nd is nothing then...
?
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Правильно.

Про правильность можешь почитать на .
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
ну вот конкретно в такой ситуевине - яб подумал об: Error CUSTOM_ERRCODE, CUSTOM_DESCRIPTION
тока On Error Goto 0 (возвратил бы обработчик)
все-таки nothing объекта это не совсем "штатно" :rolleyes:
а снаружи обработка

почему так - автоматом выйдет из ф-ции/процедуры (и не нужно знать - что это конкретно) и позволит вызывающему коду решить

0, null, Nothing, местами "" - это дефолтные инициализаторы и совпадение с ними может служить сигналом о нештатном поведении
 
O

Omh

На мой взгляд, множественные выходы из программы это нормально.
Особенно в начале процедуры при разлчиных проверках.
Потому что многоступенчатые if слабо читаемы.

Применительно к этому случаю, imho, вполне нормально выйти при несужествовании обьекта документа.
Я так частенько на QueryOpen формы пишу, ибо при открытии нового документа doc будет Nothing, а уже сущестующего - Thing :rolleyes:
 
A

Akupaka

все зависит от того, что мы хотим получить в каждом конкретном случае...
в любом случае, выход из процедуры не является "плохим" вариантом,
плохо будет работать потом, после исполнения процедуры...
объясню, процедуры могут быть определяющими дальнейшую обработку, либо не определяющими (это не стандарт, просто так назвал), т.е. если после исполнения процедуры нам важно работать с каким-либо результатом ее действий, то процедура должна быть определяющей.
для определяющих процедур лучше использовать функции, т.к. их результат легче обработать, но можно использовать процедуры, которые возвращают результат как параметр.
если процедура не определяющая, то свободно можно использовать выход из процедуры, в крайнем случае, нам потребуется дополнительное оповещение пользователя о неудачном выполнении процедуры:
Код:
if badCondition then
Messagebox "Bad condition"
exit sub
end if

если процедура определяющая, то придется добавить какой-то результат ее работы:
Код:
if badCondition then
error 1000, "Bad condition"
end if
Код:
if badCondition then
result = errCode
exit sub
end if

я бы рекомендовал все процедуры писать как определяющие, в таком случае это не приведет к необходимости ее исправления при надобности, а затраты почти нулевые, т.к. в любом случае в процедуры добавляются обработчики ошибок, а в обработчике это все дело легко реализуется... если вы не используете обработчики, я рекомендую начать :)
единственное, что иногда труднее определить как именно отображать ошибку наверх, т.е. тут два варианта:
1) сгенерировать исключение и передать его в вызывающую процедуру, которая в свою очередь должна будет обработать его;
2) просто вернуть флаг исключение, например result = false, а вызывающая процедура смотрит
Код:
if mysub() then
дальнейшая работа
else
обработка неудачной ситуации
end if
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!