Никогда, о nevermore
May. 5th, 2010 11:40 pmНа сайте Фейерштейна (никогда не знаешь, как его правильно написать, а тем более — произнести) выложены несколько «стандартов кодирования» для PL/SQL. Интересно, думаю, надо посмотреть. Читаю:
Never issue a RETURN statement inside a loop. Your module should have one point of exit.
Ну почему, объясните! Нет, просто never и всё тут. По-моему, это всё из серии «никогда не используйте GOTO» — почему, уже никто не помнит, но все знают, что не положено.
Ещё и ещё раз убеждаюсь в том, что вместо тонны категоричных формулировок куда полезнее сформулировать несколько основополагающих правил и показать, как они работают на практике. Sapienti sat, а остальным всё равно не поможет.
Что, собственно, я и пытался проделать на работе на своём семинаре про качественные программы: у каждого свой способ чинить мотоцикл... Было уже две серии, видимо будет ещё. Кое-что можно и нужно улучшить, но в целом вроде получилось.
no subject
Date: 2010-05-05 09:32 pm (UTC)no subject
Date: 2010-05-06 08:29 pm (UTC)Могу даже пригласить_на, если выдержишь 2 × 4 часа нравоучений :)
no subject
Date: 2010-05-06 09:09 pm (UTC)no subject
Date: 2010-05-06 07:45 am (UTC)Почему? Ну, потому что вдруг придет голову дописать что-нибудь общее, что должно выполняться перед выходом из модуля в любом случае? Ну и окажется, что, если есть дострочные выходы, то им это дописывание будет недоступно, просто потому, что о них забыли.
no subject
Date: 2010-05-06 07:48 am (UTC)no subject
Date: 2010-05-06 08:27 pm (UTC)Да-да, а GOTO нельзя использовать, поскольку это приводит к неструктурированному и запутанному коду.
Давай на примере. Вот так:
int get_something() { if (...) { // отбросим эти тривиальные случаи return 0; } . . . . . . . . . return (...); }Или вот так:
int get_something() { int something; if (!...) { . . . . . . . . . something = (...); } else { something = 0; } return something; }По-моему, вопрос спорный и лежит в плоскости личных пристрастий, а не читабельности.
no subject
Date: 2010-05-07 07:53 am (UTC)В свое время я читал один серьезный документ о правилах "безопасного" кодирования, там тоже это было.
Как я понимаю, вар 1. очень трудно описать в стандарте. Ну не скажешь же "все дострочные выходы из модуля должны встречаться не более чем в превых X строках определения". А если вообще ничего не сказать, то, значит, можно дострочно выходить из любого места из любого if'а любой степени вложенности. И будет совершенно нечитаемо и несопровождаемо. С Goto, кстати, аналогичная фигня.
> По-моему, вопрос спорный и лежит в плоскости личных пристрастий
Проблема в том, что категориями личных пристрастий стандарт оперировать не может :-)
no subject
Date: 2010-05-07 02:50 pm (UTC)Поэтому для любого набора правил можно написать программу, им удовлетворяющую, но такую, что без слёз на неё смотреть будет невозможно.
А поэтому без апелляции к здравому смыслу всё равно не обойтись. Что и хорошо :)
no subject
Date: 2010-06-29 09:59 am (UTC)no subject
Date: 2010-07-03 12:55 pm (UTC)no subject
Date: 2010-07-04 09:45 pm (UTC)Если, применяя какое-то менее эмпирическое правило, ты получаешь более понятную программу, то ты на правильном пути. А если не получаешь — то ну его, надо искать что-то другое.