Re: Здраствуйте не поможите правельно создать процедуру
On Fri, 31 Oct 2008 12:24:12 +0300, Dmitri Kuzmenko [EMAIL PROTECTED] wrote: while do begin ... ... ... еще 10 строк ... ... end; это я еще сюда отступов добавил. А так, ты уверен, что не проглядел в середине этого текста вот такую хрень: if then begin end; Это вообще не аргумент. Потому что сугубо субьективен. Да, я уверен. Потому что отступ. И мой END всегда находится на уровне того оператора, который завершает (WHILE). А вот контрпример к твоему правилу: while (some calculations) do i = i + 1; begin -- А тут тоже чёта делаем end begin, на глазок и с точки зрения твоего видения синтаксиса, относится к while, тогда как нет, не относится. Когда такое написание может быть обосновано? Да к примеру с конструкцией WHEN. Которая затем может быть убрана из кода. Или не убрана. Или даже так: while (some complicated calculations with changing values - for ex., executing stored proc) do; begin -- А тут тоже чёта делаем end -- Сергей Смирнов.
Re: Здраствуйте не поможите правельно создать процедуру
Доброго времени суток! On 11 нояб, 11:48, WildSery wrote: А вот контрпример к твоему правилу: while (some calculations) do i = i + 1; begin -- А тут тоже чёта делаем end begin, на глазок и с точки зрения твоего видения синтаксиса, относится к while, тогда как нет, не относится. В общем, приходим к тому, что для любого оператора цикла/условия желательно сразу использовать составной блок вне зависимости от количества операторов. Я лично так и делаю. -- С уважением, Евгений
Re: Здраствуйте не поможите правельно создать процедуру
Dmitri Kuzmenko пишет: Правильные пацаны давно составные конструкции одними отступами отмечают (Python, Haskell). то же дерьмо. я это уже кушал в Mumps. F I=0..10 DO .S A=I... Из реального проекта: def walk_devices(self): logging.info('Scan for timeouted device') try: from reciver.save2base import _connect_curs curs = _connect_curs() dt = datetime.now() - timedelta(seconds=SEC_TIMEOUT) curs.execute(sel_timrout_devices, dt) for row in curs: dev_id = row[0] logging.info('Timeout for device %d', dev_id) do_device(curs, dev_id) self.start() except: logging.exception('Error for scan device') П.С. И в С и в Pascal-е всегда писали и пишем именно в осуждаемом стиле. да никогда такого не было, чтобы begin писали на той же строке что и if, when и так далее. Это какой-то сишник один раз применил, а потом началось... Я для паскаля такой стиль придумал ещё до плотного знакомства с С. :) Именно из соображений компактности по вертикали - вспомни сколько строк текста вмещалось в редакторе Borland Pascal-я? ~20 а то и меньше. Ну а в режиме отладки так вообще если строк 10 поместится - щастье. Так что такой компактный стиль вполне оправдывался. :) -- Александр Замараев
Re: Здраствуйте не поможите правельно создать процедуру
Hello, Tonal! Tonal wrote: Правильные пацаны давно составные конструкции одними отступами отмечают (Python, Haskell). Так что и холиваров никаких из за подобных глупостей там нет. :) то же дерьмо. я это уже кушал в Mumps. F I=0..10 DO .S A=I... П.С. И в С и в Pascal-е всегда писали и пишем именно в осуждаемом стиле. да никогда такого не было, чтобы begin писали на той же строке что и if, when и так далее. Это какой-то сишник один раз применил, а потом началось... -- Dmitri Kouzmenko, www.ibase.ru, (495) 953-13-34
Re: Здраствуйте не поможите правельно создать процедуру
Hello, Евгений! Кузнецов Евгений wrote: По while, вестимо. звездец... То есть? Если в любом if/while/for/repeat всегда будет begin, то не все ли равно где - на той же строке или на следующей? Не понимаю Вашей категоричности. потому что не видишь. очень жаль. сочувствую тем, кто будет читать твой код (если будет). -- Dmitri Kouzmenko, www.ibase.ru, (495) 953-13-34
Re: Здраствуйте не поможите правельно создать процедуру
Доброго времени суток! On 5 нояб, 10:27, Dmitri Kuzmenko wrote: потому что не видишь. очень жаль. сочувствую тем, кто будет читать твой код (если будет). Так и помру неучем :) К счастью, мой код не представляет особенной ценности для потомков. Кстати, в Обероне, насколько я в курсе, Вирт ввел обязательный END для WHILE\IF-блоков, и BEGIN там уже не нужен. Т.е. получаем WHILE (condition) DO END IF (condition) THEN ELSE END или IF (condition) THEN ELSEIF (condition) THEN END Заодно и решена проблема неопределенного Else. -- С уважением, Евгений
Re: Здраствуйте не поможите правельно создать процедуру
Доброго времени суток! On 31 окт, 12:24, Dmitri Kuzmenko wrote: Керниган идет лесом (а еще конкретнее - в задницу). Иногда очень умные люди порят полную чушь. Или, их мудрые высказывания интерпретируют ровно наоборот. Объясни мне, как ты увидишь, где начинается блок, если написано так\ while do begin ... ... ... еще 10 строк ... ... end; По while, вестимо. это я еще сюда отступов добавил. А так, ты уверен, что не проглядел в середине этого текста вот такую хрень: if then begin end; ? То есть? Если в любом if/while/for/repeat всегда будет begin, то не все ли равно где - на той же строке или на следующей? Не понимаю Вашей категоричности. -- С уважением, Евгений
Re: Здраствуйте не поможите правельно создать процедуру
Dmitri Kuzmenko пишет: Керниган идет лесом (а еще конкретнее - в задницу). Иногда очень умные Истину глаголешь! Да и вообще все эти begin/end-ы и кривые скобочки не более чем синтаксический мусор! Правильные пацаны давно составные конструкции одними отступами отмечают (Python, Haskell). Так что и холиваров никаких из за подобных глупостей там нет. :) П.С. И в С и в Pascal-е всегда писали и пишем именно в осуждаемом стиле. Для более компактного представления алгоритма. Символов табуляции не используем. За коверканье отступов выговор, с занесением. :) -- Александр Замараев
RE: Здраствуйте не поможите правельно создать процедуру
Привет! я такую фигню (парсеры с подстановкой) писал в 1993 году. И умудрялся запятые ставить корректно, после имен. И чтобы после последнего элемента списка запятой не было. Вах, гуру! ;) А если серьезно - да какая нафиг разница, как ты текст пишешь? Эстетам все равно не угодить. Главные критерии: 1) работоспособность 2) соответствие хоть каким-то стандартам (корпоративным, общепринятым, еще каким-то) 3) читабельность (хотя бы относительная, на уровне понимания алгоритма) 4) наличие комментариев (хотя бы минимальное) WBR, Dmitry Beloshistov AKA [-=BDS=-] __ Èíôîðìàöèÿ îò ESET NOD32 Antivirus, âåðñèÿ áàçû äàííûõ ñèãíàòóð âèðóñîâ 3571 (20081030) __ Ñîîáùåíèå ïðîâåðåíî ïðîãðàììîé ESET NOD32 Antivirus. http://www.esetnod32.ru
Re: Здраствуйте не поможите правельно создать процедуру
Hello, Булгачев Сергей! You wrote on Thu, 30 Oct 2008 19:55:05 +0300: list = element [',' element ...] запятая - она в начале, а не в конце куда пишем чаще? БС Ну не знаю, не убедил, вобщем :) Сергей, ты ни разу не забывал при дописывании списка запятую в конце поставить!? или переставляя местами элементы в списке в зяпятых ошибиться!? скажем, решил я в список полей добавить rdb$description select rdb$field_name, rdb$field_position, rdb$relation_name rdb$description from rdb$relation_fields where rdb$relation_name = :rdb$relation_name и по забывчивости запятую пропустил а получил синтаксически верную конструкцию! но дальше она мне может боком вылезти. поэтому я уш лучше вот так буду писать на автомате: select rdb$field_name ,rdb$field_position ,rdb$relation_name ,rdb$description from rdb$relation_fields where rdb$relation_name = :rdb$relation_name и не загружать мозг синтаксическим анализом :-) а как удобно я вам доложу из того create table, што я приводил, вытаскивать список полей с запятыми :-) Фёдоров Евгений. ЗАО Трест-М. Екатеринбург.
Re: Здраствуйте не поможите правельно создать процедуру
Hello, Dmitri Kuzmenko! You wrote on Fri, 31 Oct 2008 00:18:03 +0300: Дим, а как ты относишься к таким расстановкам запятых? DK по правилам правописания, текст запятыми отделяется именно так, как DK я это делаю в тексте, что ты читаешь. дык если б мы писали программы на русском языке, у нас бы и скобок вложенных бы не было! большинство людей из пяти вычитает три, а я складываю пять и минус три :-) Фёдоров Евгений. ЗАО Трест-М. Екатеринбург.
Re: Здраствуйте не поможите правельно создать процедуру
и слово ,начинающееся с запятой ,это нонсенс какой-то. -- Dmitri Kouzmenko,www.ibase.ru, (495) 953-13-34 Это просто удобно. Насчет CREATE TABLE ничего не скажу, потому как последний раз создавал таблицу ручками в 2002 году, а сейчас очень плотно на IBExpert-e сижу. А вот в PSQL-блоках - очень удобно. Закомментировал строчку для отладки, отладил - вернул обратно. И опять же таки, последние год я все отчеты на PSQL-блоки переделывал и изначально проектировал, вместо хранимых процедур. А там, когда автоматика генерит скрипт, тоже удобно, чтоб не забыть про запятые и не наставить лишних.
Re: Здраствуйте не поможите правельно создать процедуру
Hello, Gene! Gene Feudorov wrote: поэтому я уш лучше вот так буду писать на автомате: select rdb$field_name ,rdb$field_position ,rdb$relation_name ,rdb$description from rdb$relation_fields where rdb$relation_name = :rdb$relation_name и не загружать мозг синтаксическим анализом :-) я не эстет, но у меня внутреннее противоречие по поводу таких конструкций. -- Dmitri Kouzmenko, www.ibase.ru, (495) 953-13-34
Re: Здраствуйте не поможите правельно создать процедуру
Dmitri Kuzmenko wrote: В общем, если форматирование ПОЗВОЛЯЕТ неверно интерпретировать структуру кода, то ну его нахрен такое форматирование. ну чего вы спорите то? У вас в редакторе нету сворачивания блоков кода и подсветки синтаксиса? Пишите главное чтоб удобно было тому кто пишет. остальное все условности.
Re: Здраствуйте не поможите правельно создать процедуру
Dmitri Kuzmenko: Иногда очень умные люди порят полную чушь. Они иногда и пишут так :-) while (fb_interpret(s + 1, sizeof(s) - 1, vector)) { translate_cp(s); alice_output(%s\n, s); }
Re: Здраствуйте не поможите правельно создать процедуру
Dmitriy A. Beloshistov wrote: А если серьезно - да какая нафиг разница, как ты текст пишешь? Эстетам все равно не угодить. Это, оно конешно. Потому что - знамо дело. Но - однако. Я вот, например, глянул на это буквостолпотворение в корневом, зевнул, и пошёл к следующему посту. Была охота глаза ломать... -- Regards. Ded.
Re: Здраствуйте не поможите правельно создать процедуру
Dmitri Kuzmenko wrote: Иногда очень умные люди порят полную чушь. Точно-точно. Я за собой это в последнее время тоже всё чаще замечаю. Или, их мудрые высказывания интерпретируют ровно наоборот. А уж про это и говорить нечего. -- Regards. Ded.
Re: Здраствуйте не поможите правельно создать процедуру
Hello, Ded! Ded wrote: Иногда очень умные люди порят полную чушь. Точно-точно. Я за собой это в последнее время тоже всё чаще замечаю. я про себя писал? тоже могу отмочить :-) -- Dmitri Kouzmenko, www.ibase.ru, (495) 953-13-34
Re: Здраствуйте не поможите правельно создать процедуру
while ... do begin ... ... if ... then begin ... ... end; ... end; Именно так требую форматировать все программы уже мног лет. Подобное форматирование предлагал еще Вирт - кажется он имел некое отношение к паскалю :) Я показываю такое форматирование потенциальному новому сотруднику и прошу объяснить а почему собственно, если может объяснить но это дополнительный + :)
Здраствуйте не поможите правельно создать процедуру
Вот сама процедура СREATE OR ALTER PROCEDURE P_PRICE ( pcur integer, fprn integer) returns ( sec varchar(255), prub float, qinp integer, unt varchar(255), nm varchar(255)) as begin if (pcur = '0' and fprn = '0') then begin for select gd.nm, unt.nm as unt, gd.qinp, gd.prub as prub, sec.nm as sec from gd inner join unt unt on (gd.id_unt = unt.id) inner join sec sec on (gd.id_sec = sec.id) Order By id_sec, gd.nm INTO :nm,:unt,:qinp,:prub,:sec do begin suspend; end end if (pcur = '1' and fprn = '0') then begin for select gd.nm, unt.nm as unt, gd.qinp, gd.pcur as prub, sec.nm as sec from gd inner join unt unt on (gd.id_unt = unt.id) inner join sec sec on (gd.id_sec = sec.id) Order By id_sec, gd.nm INTO :nm,:unt,:qinp,:prub,:sec do begin suspend; end end if (pcur = '0' and fprn = '1') then begin for select gd.nm, unt.nm as unt, gd.qinp, gd.prub as prub, sec.nm as sec from gd inner join unt unt on (gd.id_unt = unt.id) inner join sec sec on (gd.id_sec = sec.id) where gd.fprn = 1 Order By id_sec, gd.nm INTO :nm,:unt,:qinp,:prub,:sec do begin suspend; end end if (pcur = '1' and fprn = '1') then begin for select gd.nm, unt.nm as unt, gd.qinp, gd.pcur as prub, sec.nm as sec from gd inner join unt unt on (gd.id_unt = unt.id) inner join sec sec on (gd.id_sec = sec.id) where gd.fprn = 1 Order By id_sec, gd.nm INTO :nm,:unt,:qinp,:prub,:sec do begin suspend; end end if (pcur = '0' and fprn = '2') then begin for select gd.nm, unt.nm as unt, gd.qinp, gd.prub as prub, sec.nm as sec from gd inner join unt unt on (gd.id_unt = unt.id) inner join sec sec on (gd.id_sec = sec.id) where sec.fprn = 1 Order By id_sec, gd.nm INTO :nm,:unt,:qinp,:prub,:sec do begin suspend; end end if (pcur = '1' and fprn = '2') then begin for select gd.nm, unt.nm as unt, gd.qinp, gd.pcur as prub, sec.nm as sec from gd inner join unt unt on (gd.id_unt = unt.id) inner join sec sec on (gd.id_sec = sec.id) where sec.fprn = 1 Order By id_sec, gd.nm INTO :nm,:unt,:qinp,:prub,:sec do begin suspend; end end end не подскажите как сделать процедуру вида СREATE OR ALTER PROCEDURE P_PRICE ( pcur integer, fprn integer) returns ( sec varchar(255), prub float, qinp integer, unt varchar(255), nm varchar(255)) as begin if (pcur = '0') then begin for select gd.nm, unt.nm as unt, gd.qinp, gd.prub as prub, sec.nm as sec from gd end if (pcur = '1') then begin for select gd.nm, unt.nm as unt, gd.qinp, gd.prub as pcur, sec.nm as sec from gd end inner join unt unt on (gd.id_unt = unt.id) inner join sec sec on (gd.id_sec = sec.id) if (pcur = '1') then begin where gd.fprn = 1 end; if (pcur = '1') then begin where sec.fprn = 1 end; Order By id_sec, gd.nm INTO :nm,:unt,:qinp,:prub,:sec do begin suspend; Спасибо
Re: Здраствуйте не поможите правельно создать процедуру
ZiBiT wrote: Вот сама процедура вопрос-то в чем? и зачем процедура два раза? и почему такое кривое форматирование отступов в коде? че это за блядство (другого термина не нахожу) do begin suspend; end end ты пробелы и строки экономишь, что-ли? -- Dmitri Kouzmenko, www.ibase.ru, (495) 953-13-34
Re: Здраствуйте не поможите правельно создать процедуру
Dmitri Kuzmenko wrote: че это за блядство (другого термина не нахожу) do begin suspend; end end и вообще, почему без шапки.
Re: Здраствуйте не поможите правельно создать процедуру
Hello, Alexandr! Kochmin Alexandr wrote: и вообще, почему без шапки. да можно и без шапки, только я считаю, что форматирование кода весьма важная вещь. и если человек не умеет его форматировать ДЛЯ СЕБЯ, а не для дяди, то этому человеку надо срочно вправить руки. можно даже вот этим пользоваться http://dn.codegear.com/article/10280 там примеров навалом. Я знаю что очень часто люди пишут так: // INCORRECT while (LongExpression1 or LongExpression2) do begin // DoSomething // DoSomethingElse; end; когда на самом деле это жутко криво и неправильно правильно вот так // CORRECT while (LongExpression1 or LongExpression2) do begin // DoSomething // DoSomethingElse; end; я еще делаю отступы у блока begin/end, но это уже непринципиально. -- Dmitri Kouzmenko, www.ibase.ru, (495) 953-13-34
RE: Здраствуйте не поможите правельно создать процедуру
Привет. Засунь в отдельную процедуру/вьюху for select gd.nm,gd.fprn, unt.nm as unt, gd.qinp, gd.prub as prub,sec.nm as sec from gd inner join unt unt on (gd.id_unt = unt.id) inner join sec sec on (gd.id_sec = sec.id) Order By id_sec, gd.nm INTO :nm,:fprn,:unt,:qinp,:prub,:sec /* для процедуры */ Ну а в основной процедуре проверяй условия и накладывай свое дополнительное where. Что-то вроде: If (fprn0) then For select nm,unt,qinp,prub,sec From subprocedure Where fprn=1 Into :nm,:unt,:qinp,:prub,:sec Do suspend; Else For select nm,unt,qinp,prub,sec From subprocedure Into :nm,:unt,:qinp,:prub,:sec Do suspend; WBR, Dmitry Beloshistov AKA [-=BDS=-] __ Eioi?iaoey io ESET NOD32 Antivirus, aa?ney aacu aaiiuo neaiaoo? ae?onia 3568 (20081030) __ Niiauaiea i?iaa?aii i?ia?aiiie ESET NOD32 Antivirus. http://www.esetnod32.ru
Re: Здраствуйте не поможите правельно создать процедуру
Hello, Dmitri Kuzmenko! You wrote on Thu, 30 Oct 2008 10:52:19 +0300: DK когда на самом деле это жутко криво и неправильно правильно вот так Дим, а как ты относишься к таким расстановкам запятых? select C.Calc_ID, C.Item_ID, C.Active_ ,C.Add_Date, C.Add_User ,(case when C.Active_=1 then 'Активная' end) as ActiveName from Calc C where C.Item_ID=:Item_ID create table BALANCE( BALANCE_ID D_PK not null ,NAME D_NAME ,IS_BLACK D_SIGN ,DEL_USER D_USER_ID ,DEL_DATE D_DATE ); эт криво и неправильно, но так минимизирует ошибки :-) Фёдоров Евгений. ЗАО Трест-М. Екатеринбург.
RE: Здраствуйте не поможите правельно создать процедуру
эт криво и неправильно, но так минимизирует ошибки :-) У меня часть скриптов генерируется ботами на основе вот такого: /* %%TABLECOMMENT */ CREATE %TABLENAME% ( %%FIELDLIST %FIELDNAME% %FIELDTYPE% %NOT NULL% ); Или SELECT %%FIELDLIST FROM %PROCNAME% %%PARAMLIST %%WHERESTATEMENT Тоже криво и неправильно, но я вообще часто не смотрю, что там внутри сгенерилось ;)) P.S. Эх, еще бы придумать как сложные JOIN`ы на автомате делать. __ Èíôîðìàöèÿ îò ESET NOD32 Antivirus, âåðñèÿ áàçû äàííûõ ñèãíàòóð âèðóñîâ 3570 (20081030) __ Ñîîáùåíèå ïðîâåðåíî ïðîãðàììîé ESET NOD32 Antivirus. http://www.esetnod32.ru
Re: Здраствуйте не поможите правельно создать процедуру
Hello, Gene! Gene Feudorov wrote: Дим, а как ты относишься к таким расстановкам запятых? select C.Calc_ID, C.Item_ID, C.Active_ ,C.Add_Date, C.Add_User ,(case when C.Active_=1 then 'Активная' end) as ActiveName я не истина в последней инстанции, но отрицательно. по правилам правописания, текст запятыми отделяется именно так, как я это делаю в тексте, что ты читаешь. Поэтому BALANCE_ID D_PK not null, NAME D_NAME, IS_BLACK D_SIGN, и слово ,начинающееся с запятой ,это нонсенс какой-то. эт криво и неправильно, но так минимизирует ошибки :-) не знаю, где минимизирует. -- Dmitri Kouzmenko, www.ibase.ru, (495) 953-13-34
Re: Здраствуйте не поможите правельно создать процедуру
Hello, Dmitriy! Dmitriy A. Beloshistov wrote: У меня часть скриптов генерируется ботами на основе вот такого: Или SELECT %%FIELDLIST FROM %PROCNAME% %%PARAMLIST %%WHERESTATEMENT Тоже криво и неправильно, но я вообще часто не смотрю, что там внутри сгенерилось ;)) я такую фигню (парсеры с подстановкой) писал в 1993 году. И умудрялся запятые ставить корректно, после имен. И чтобы после последнего элемента списка запятой не было. -- Dmitri Kouzmenko, www.ibase.ru, (495) 953-13-34
Re: Здраствуйте не поможите правельно создать процедуру
я такую фигню (парсеры с подстановкой) писал в 1993 году. И умудрялся запятые ставить корректно, после имен. И чтобы после последнего элемента списка запятой не было. блин, а у меня другая техника была, я перед всеми кроме первого ставил ;-)
Re: Здраствуйте не поможите правельно создать процедуру
Dmitri Kuzmenko wrote: там примеров навалом. Я знаю что очень часто люди пишут так: // INCORRECT while (LongExpression1 or LongExpression2) do begin // DoSomething // DoSomethingElse; end; когда на самом деле это жутко криво и неправильно правильно вот так А вот Керниган с этим не согласен :-)