?

Log in

No account? Create an account

Ср, 5 май, 2010, 23:40
Никогда, о nevermore

На сайте Фейерштейна (никогда не знаешь, как его правильно написать, а тем более — произнести) выложены несколько «стандартов кодирования» для PL/SQL. Интересно, думаю, надо посмотреть. Читаю:

Never issue a RETURN statement inside a loop. Your module should have one point of exit.

Ну почему, объясните! Нет, просто never и всё тут. По-моему, это всё из серии «никогда не используйте GOTO» — почему, уже никто не помнит, но все знают, что не положено.

Ещё и ещё раз убеждаюсь в том, что вместо тонны категоричных формулировок куда полезнее сформулировать несколько основополагающих правил и показать, как они работают на практике. Sapienti sat, а остальным всё равно не поможет.

Что, собственно, я и пытался проделать на работе на своём семинаре про качественные программы: у каждого свой способ чинить мотоцикл... Было уже две серии, видимо будет ещё. Кое-что можно и нужно улучшить, но в целом вроде получилось.

Ср, 5 май, 2010 21:32 (UTC)
hardsign

А где бы ознакомиться_с?

Чт, 6 май, 2010 20:29 (UTC)
egorius

В печатном виде пока_не, но как только_то.
Могу даже пригласить_на, если выдержишь 2 × 4 часа нравоучений :)

Чт, 6 май, 2010 21:09 (UTC)
hardsign

приглашай, на...

Чт, 6 май, 2010 07:45 (UTC)
d_byzero

(занудно): но это же вообще общее правило "хорошего тона" кодирования на любом языке -- из модуля (процедуры/функции) должен быть один выход.

Почему? Ну, потому что вдруг придет голову дописать что-нибудь общее, что должно выполняться перед выходом из модуля в любом случае? Ну и окажется, что, если есть дострочные выходы, то им это дописывание будет недоступно, просто потому, что о них забыли.

Чт, 6 май, 2010 07:48 (UTC)
d_byzero

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

Чт, 6 май, 2010 20:27 (UTC)
egorius

Да-да, а GOTO нельзя использовать, поскольку это приводит к неструктурированному и запутанному коду.

Давай на примере. Вот так:

int get_something() {
  if (...) { // отбросим эти тривиальные случаи
    return 0;
  }

  . . .
  . . .
  . . .
  return (...);
}

Или вот так:

int get_something() {
  int something;

  if (!...) {
    . . .
    . . .
    . . .
    something = (...);
  } else {
    something = 0;
  }
  return something;
}

По-моему, вопрос спорный и лежит в плоскости личных пристрастий, а не читабельности.

Пт, 7 май, 2010 07:53 (UTC)
d_byzero

ну я сам использую иногда вар 1. но представляю, откуда растут ноги у требования варианта 2.

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

Как я понимаю, вар 1. очень трудно описать в стандарте. Ну не скажешь же "все дострочные выходы из модуля должны встречаться не более чем в превых X строках определения". А если вообще ничего не сказать, то, значит, можно дострочно выходить из любого места из любого if'а любой степени вложенности. И будет совершенно нечитаемо и несопровождаемо. С Goto, кстати, аналогичная фигня.

> По-моему, вопрос спорный и лежит в плоскости личных пристрастий
Проблема в том, что категориями личных пристрастий стандарт оперировать не может :-)

Пт, 7 май, 2010 14:50 (UTC)
egorius

Проблема в том, что понятие качества вообще не является объективным :)
Поэтому для любого набора правил можно написать программу, им удовлетворяющую, но такую, что без слёз на неё смотреть будет невозможно.
А поэтому без апелляции к здравому смыслу всё равно не обойтись. Что и хорошо :)

Вт, 29 июн, 2010 09:59 (UTC)
konung2000

Кстати насчет Фейерштейна... Запустил он один проектец plsqlchallenge.com. Идея в том, чтобы раз в день отвечать на один вопрос по PL/SQL. В зависиомости уровня сложности и затраченного времени, тебе выставляются баллы. Есть два вида рейтинга - пожизненный и раз в картал. Так вот скоро начинается новый квартал - вливайтесь. А то с Арстела опознал я только одного человека и себя :)

Сб, 3 июл, 2010 12:55 (UTC)
_pk_sly

Мне мольше нравятся вот такие эмпирические правила типа "пишите понятно" :)

Вс, 4 июл, 2010 21:45 (UTC)
egorius

Я бы считал это не столько правилом, сколько указанием на то, к чему надо стремиться.
Если, применяя какое-то менее эмпирическое правило, ты получаешь более понятную программу, то ты на правильном пути. А если не получаешь — то ну его, надо искать что-то другое.