Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.03;
Скачать: CL | DM;

Вниз

Сантехники от программирования - нужны ли они ?   Найти похожие ветки 

 
@!!ex ©   (2009-11-05 12:52) [40]

> [39] Демо ©   (05.11.09 10:16)
> Ничего плохого в нём нет, если употреблён к месту.

Ага. За исключением того, что наличие места для использования goto говорит о кривых руках прогера.


 
MonoLife ©   (2009-11-05 13:04) [41]


> Демо ©   (05.11.09 10:16) [39]
> @!!ex ©   (05.11.09 12:52) [40]
>

Опять спор, древний, как "запуздырить в трей иконку":) goto, break & exit...
Как вы думаете, кого сейчас выпускают ВУЗы "слесарей" или "программистов"?
Сомневаюсь, что каждый нынешний выпускник гений и истинный программер от бога... На начальном этапе, имхо, все слесари.. А значит, завышенные требование контор исходят из того, что у кандидата есть опыт, т.е. он перешел из разряда "слесарей" в разряд "программеров"..


 
@!!ex ©   (2009-11-05 13:12) [42]

> [41] MonoLife ©   (05.11.09 13:04)

Как факт: все специалисты с окторыми я работал НЕ используют goto.
Много с кем работал... сделал для себя выводы...
Ваше право, оставлять стандартные названия компонентов на форме, писать идентефикаторы транслитом и использовать goto...
Мое право считать это ошибками.


 
MonoLife ©   (2009-11-05 13:33) [43]


> @!!ex ©   (05.11.09 13:12) [42]

дык, не о том ведь речь! Если развивать сейчас полемику об этих операторах получится еще одна очередная тема, коих я здесь встречал не раз:)
Кстати, мне не приходилось использовать goto, обходился как-то без него..:)


 
Игорь Шевченко ©   (2009-11-05 14:46) [44]

@!!ex ©   (05.11.09 12:52) [40]


> Ага. За исключением того, что наличие места для использования
> goto говорит о кривых руках прогера.


Я бы не стал так категорично утверждать - если используется к месту, то говорит о нормальных руках.
Вот когда для обхода использованию goto начинают выдумывать разные конструкции с якобы флагами, это точно говорит о кривых руках


 
@!!ex ©   (2009-11-05 15:02) [45]

> [44] Игорь Шевченко ©   (05.11.09 14:46)

Согласен, сильно категорично получилось.
Это было ИМХО естественно.
Опять же, в асме - вполне нормальная команда. (:


 
Mystic ©   (2009-11-05 15:43) [46]


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


Предупреждение предупреждению рознь. Например, я часто отключаю platform и unsafe предупреждения. Например, когда не планирую перевод проекта под .NET.

Но рефлекс останавливать компиляцию при возникновении warning-а остался.


 
Игорь Шевченко ©   (2009-11-05 15:52) [47]

Mystic ©   (05.11.09 15:43) [46]

Как ты понимаешь, я имею в виду не платформо-специфицеские предупреждения, тем более, что они появились относительно недавно, а диагноз "Индус" имеет историю еще с Турбо-версий компиляторов, то есть, с 80-ых годов


 
Jeer ©   (2009-11-05 15:53) [48]


> @!!ex ©   (05.11.09 13:12) [42]
>
> > [41] MonoLife ©   (05.11.09 13:04)
>
> Как факт: все специалисты с окторыми я работал НЕ используют
> goto.


Эта штука бывает используется при адаптации старых алгоритмов, в основном математических. Нет смысла отказываться и перелопачивать алгоритмически выверенный код. В новых используется весьма редко и опять же в т.н. стандартных функциях.
Чтобы в ООП - нет, такого за собой не припоминаю.


 
@!!ex ©   (2009-11-05 15:58) [49]

> [48] Jeer ©   (05.11.09 15:53)

Ну дык. Все претензии к goto - ухудшение читабельности=>отладки кода.
Если код уже отлажен и работает, надо делать что проще.


 
Verg   (2009-11-05 16:02) [50]

Фобии и филии - это всегда клиника. Я терпеть не могу алкашей, но и к трезвенникам отношусь настороженно.


 
Игорь Шевченко ©   (2009-11-05 16:04) [51]

@!!ex ©   (05.11.09 15:58) [49]


> Ну дык. Все претензии к goto - ухудшение читабельности=>отладки
> кода.


У меня претензия к конструкции try .. finally или try..except

У меня более общая претензия к разработчикам, которые строят работу на механизме исключений, вместо возратов результатов функций (такое нередко случается)


 
Anatoly Podgoretsky ©   (2009-11-05 16:07) [52]

> @!!ex  (05.11.2009 15:58:49)  [49]

Претензии не к читабельности, а к возможности передать управление внутрь, при том не сразу, а при некотором изменение программы. а читабельность/отладка это вторично.


 
Verg   (2009-11-05 16:08) [53]


> try .. finally


Замечательная конструкция. И даже без механизма исключений.


 
Jeer ©   (2009-11-05 16:12) [54]


> И даже без механизма исключений.


Стараюсь обходиться без онного для настольных систем, для embedded - а куды деваться, прерывания - основа.


 
Leonid Troyanovsky ©   (2009-11-05 16:29) [55]


> Игорь Шевченко ©   (05.11.09 16:04) [51]

> работу на механизме исключений

Работа на механизме не греет душу.
Мне нравится их возбуждать :)

--
Regards, LVT.


 
Alkid ©   (2009-11-05 16:34) [56]


> Игорь Шевченко ©   (05.11.09 16:04) [51]

А чем не угодил механизм исключений? Или речь идет о неправильном его использовании?


 
Игорь Шевченко ©   (2009-11-05 16:41) [57]

Alkid ©   (05.11.09 16:34) [56]

К самому механизму претензий нет. Впрочем, как к любому механизму.

Есть претензии к коду, преобразующему коды возврата вызванных функций к исключениям, причем, класса Exception. А во внешнем коде, преобразование полученного Exception в код возврата.
Отлаживать код с такой логикой - сущее удовольствие.

Это не надуманный пример, это из тяжелой жизни :)


 
Alkid ©   (2009-11-05 16:49) [58]


> Игорь Шевченко ©   (05.11.09 16:41) [57]

Не, ну такое понятно. Просто есть ряд программистов, которые принципиально считают исключения злом, а коды возврата -  единственным верным способом передавать информацию об ошибках. Спольски, например.


 
Демо ©   (2009-11-05 17:10) [59]


> @!!ex ©   (05.11.09 12:52) [40]
> > [39] Демо ©   (05.11.09 10:16)
> > Ничего плохого в нём нет, если употреблён к месту.
>
> Ага. За исключением того, что наличие места для использования
> goto говорит о кривых руках прогера.


Вряд ли. Скорее говорит о владении языком программирования, незашоренности и о том, что человек не следует тупо авторитетам.


 
Игорь Шевченко ©   (2009-11-05 17:21) [60]

Alkid ©   (05.11.09 16:49) [58]

У меня мнение простое - исключение должно говорить о ситуации в программе, для которой программист не предусмотрел штатной обработки.

Кстати, за код вида
try
 ...
except end;

надо сразу вешать за все выступающие части, если не написан подробный комментарий, почему в данном богоизбранном участке кода все без исключения исключения (пардон за тавтологию) должны игнорироваться


 
@!!ex ©   (2009-11-05 17:26) [61]

> [59] Демо ©   (05.11.09 17:10)

Ага. А переход через проезжую часть вместо пешеходного говорит о смелости, знании правил и о том, что человек не следует тупо авторитетам... ЛОЛ.
ПРавила рождаются не благодаря авторитетам, а из вполне жизненных проблем.
Использование goto не оправданно в большинстве случае. Исключения типа [48] только подтверждают правило.


 
Verg   (2009-11-05 17:28) [62]


switch( variable )  
{
  case true: goto l1;
     break;
  case false: goto l2;
     break;
  default: <убить себя ап стену>;
     break;
}
l1: return true;
l2: return false;


 
TUser ©   (2009-11-05 17:31) [63]


> @!!ex ©   (05.11.09 15:58) [49]

В смысле? Если отлажен и работает, то надо туда еще пару goto вписать для красоты?

Вообще, буду признателен за пример, где обычный goto (не exit/break/etc, а именно он сам (и не On Error Goto)) употреблен на полноценном ЯВУ (где есть операторы цикла while и repeat и всякие методы их прерывания, такие как break/continue в джаве) к месту, нормально работает и читается. А то "всякий овощ бывает полезен" звучит как-то неубедительно.


 
@!!ex ©   (2009-11-05 17:33) [64]

> [63] TUser ©   (05.11.09 17:31)
> Если отлажен и работает, то надо туда еще пару goto вписать
> для красоты?

Для переноса уже готового алгоритма, который работае с использование goto.
Внимательнее прочитай. :)

Я вообще против использования в любых целях, но чему меня тут научили, так это тому, что квантор всеобщности применять не стоит. :)


 
TUser ©   (2009-11-05 17:34) [65]


> Verg   (05.11.09 17:28) [62]

:) ну если так, то да, goto как метод обфрускации


 
Jeer ©   (2009-11-05 17:39) [66]


> метод обфрускации


обфускации (obfuscare)


 
Игорь Шевченко ©   (2009-11-05 17:42) [67]


> Вообще, буду признателен за пример, где обычный goto (не
> exit/break/etc, а именно он сам (и не On Error Goto)) употреблен
> на полноценном ЯВУ


поиск среди Program Files\Borland\BDS\x.0\Source\*.pas


 
Verg   (2009-11-05 17:43) [68]


> Вообще, буду признателен за пример,


Да любая попытка работы с ресуросм.

Захват,
работа, которая может породить ошибку, требующую прекращения работы с ресурсом.

без try...finally такой код был бы испещрен goto, либо однообразными операциями закрытия ресурса + exit


 
Jeer ©   (2009-11-05 17:55) [69]

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

// Балансировка квадратной матрицы

Unit AMB1R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc;

procedure AMB1R(NM :Integer; N :Integer; var A :Array of Real;
               var LOW :Integer; var IGH :Integer;
               var SCALE :Array of Real);
implementation

procedure AMB1R(NM :Integer; N :Integer; var A :Array of Real;
               var LOW :Integer; var IGH :Integer;
               var SCALE :Array of Real);
var
I,IEXC,J,JJ,K,L,M :Integer;
B2,C,F,G,R,RADIX,S :Real;
NOCONV :Boolean;
const
SYS063 :Real = 2.0;
label
_10,_20,_30,_40,_50,_60,_70,_80,_90,_100,_110,_120,_130,_140,_150,
_160,_170,_180,_190,_200,_210,_220,_230;
begin
{      RАDIХ - ОСНОВАНИЕ СИСТЕМЫ СЧИСЛЕНИЯ,ИСПОЛЬЗУЕМОЙ }
{      В АРИФМЕТИКЕ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ НА ДАННОЙ МАШИНЕ }
RADIX := SYS063;
B2 := RADIX*RADIX;
K := 1;
L := N;
goto _60;
{      ПРЕДВАРИТЕЛЬНАЯ ПЕРЕСТАНОВКА СТРОК И СТОЛБЦОВ }
_10:
SCALE[M-1] := J;
if ( J = M )
then goto _40;
for I:=1 to L do
begin
 F := A[(I-1)+(J-1)*NM];
 A[(I-1)+(J-1)*NM] := A[(I-1)+(M-1)*NM];
 A[(I-1)+(M-1)*NM] := F;
_20:
end;
for I:=K to N do
begin
 F := A[(J-1)+(I-1)*NM];
 A[(J-1)+(I-1)*NM] := A[(M-1)+(I-1)*NM];
 A[(M-1)+(I-1)*NM] := F;
_30:
end;
_40:
case IEXC of
1: goto _50;
2: goto _90;
end;
{      ПОИСК СТРОК С ИЗОЛИРОВАННЫМИ С.ЗН. НА ДИАГОНАЛИ }
{      И СДВИГ ИХ ВНИЗ }
_50:
if ( L = 1 )
then goto _230;
L := L - 1;
{      J = L,1,-1 }
_60:
for JJ:=1 to L do
begin
 J := L + 1 - JJ;
 for I:=1 to L do
  begin
   if ( I = J )
    then goto _70;
   if ( A[(J-1)+(I-1)*NM] <> 0.0 )
    then goto _80;
_70:
  end;
 M := L;
 IEXC := 1;
 goto _10;
_80:
end;
goto _100;
{      ПОИСК СТОЛБЦОВ С ИЗОЛИР. С.ЗН. НА ДИАГОНАЛИ }
{      И СДВИГ ИХ ВЛЕВО }
_90:
K := K + 1;
_100:
for J:=K to L do
begin
 for I:=K to L do
  begin
   if ( I = J )
    then goto _110;
   if ( A[(I-1)+(J-1)*NM] <> 0.0 )
    then goto _120;
_110:
  end;
 M := K;
 IEXC := 2;
 goto _10;
_120:
end;
{      МАСШ-ИЕ ПОДМАТРИЦЫ,РАСПОЛОЖЕННОЙ В СТРОКАХ }
{      И СТОЛБЦАХ С НОМЕРАМИ ОТ К ДО L }
for I:=K to L do
begin
 SCALE[I-1] := 1.0;
_130:
end;
{      ИТЕРАЦИОННОЕ УМЕНЬШЕНИЕ НОРМЫ }
_140:
NOCONV :=False;
for I:=K to L do
begin
 C := 0.0;
 R := 0.0;
 for J:=K to L do
  begin
   if ( J = I )
    then goto _150;
   C := C + Abs(A[(J-1)+(I-1)*NM]);
   R := R + Abs(A[(I-1)+(J-1)*NM]);
_150:
  end;
{      МЕРЫ ПРЕДОСТОРОЖНОСТИ В СЛУЧАЕ С=. ИЛИ R=. }
 if ( C = 0.0 ) or ( R = 0.0 )
  then goto _220;
 G := R/RADIX;
 F := 1.0;
 S := C + R;
_160:
 if ( C >= G )
  then goto _170;
 F := F*RADIX;
 C := C*B2;
 goto _160;
_170:
 G := R*RADIX;
_180:
 if ( C < G )
  then goto _190;
 F := F/RADIX;
 C := C/B2;
 goto _180;
{      МАСШ-ИЕ }
_190:
 if ( (C + R)/F >= 0.95*S )
  then goto _220;
 G := 1.0/F;
 SCALE[I-1] := SCALE[I-1]*F;
 NOCONV :=True;
 for J:=K to N do
  begin
   A[(I-1)+(J-1)*NM] := A[(I-1)+(J-1)*NM]*G;
_200:
  end;
 for J:=1 to L do
  begin
   A[(J-1)+(I-1)*NM] := A[(J-1)+(I-1)*NM]*F;
_210:
  end;
_220:
end;
if ( NOCONV )
then goto _140;
_230:
LOW := K;
IGH := L;
end;

end.


 
@!!ex ©   (2009-11-05 17:57) [70]

> [69] Jeer ©   (05.11.09 17:55)

Жесть....
ИМХО ИМХО ИМХО ИМХО ИМХО


 
Игорь Шевченко ©   (2009-11-05 17:57) [71]

Jeer ©   (05.11.09 17:55) [69]

Можут, ему лучше было на фортране оставаться ?


 
TUser ©   (2009-11-05 18:01) [72]


> Игорь Шевченко ©   (05.11.09 17:42) [67]

В "C:\Program Files\Borland\Delphi7\Source\" найдено 4 файла

DSIntf.pas - Goto в комментарии
WSDLIntf.pas - в строковой константе

В
getmem.inc
MXDSSQRY.PAS

два сходных примера, а именно

procedure AAA;
begin
 ...
 if bbb then goto FastExit;
 ...
 if ccc then goto FastExit;
 ...
 exit;
FastExit:
 bla-bla-bla;
end;

Это два примера на десятки тысяч строк. В обоих случаях надо искать этот FastExit глазами в немаленькой процедуре - вот вам то самое уменьшение читабельности. Оба элементарно переписываются без goto.

function AAADone: boolean;
begin
 result := false;
 ...
 if bbb then goto exit;
 ...
 if ccc then goto exit;
 ...
end;

procedure AAAOrBlaBlaBla;
begin
 if AAADone then exit;
 bla-bla-bla;
end;

(Еще проще было возбудить исключение и обработать его в try..except, но не в getmem.inc, наверное.) Exit не требует от меня искать глазами метку. Выйти - и баста. Заодно, одна большая процедура разбивается на две поменьше.


 
TUser ©   (2009-11-05 18:02) [73]


> label
> _10,_20,_30,_40,_50,_60,_70,_80,_90,_100,_110,_120,_130,
> _140,_150,
> _160,_170,_180,_190,_200,_210,_220,_230;

С бейсика переписывали?


 
Игорь Шевченко ©   (2009-11-05 18:04) [74]

TUser ©   (05.11.09 18:01) [72]


> В "C:\Program Files\Borland\Delphi7\Source\" найдено 4 файла


подкаталога IBX нету ? Там тоже присутствует.


> Еще проще было возбудить исключение и обработать его в try.
> .except


За это надо убивать. Медленно и с наслаждением


 
Verg   (2009-11-05 18:06) [75]


> Оба элементарно переписываются без goto.


Это если не фанатеть, то Будьте добры?


> надо искать этот FastExit глазами в немаленькой процедуре


А если нет goto, то что надо будет искать  в "немаленькой процедуре"?


 
Jeer ©   (2009-11-05 18:07) [76]


> Игорь Шевченко ©   (05.11.09 17:57) [71]
>
> Jeer ©   (05.11.09 17:55) [69]
>
> Можут, ему лучше было на фортране оставаться ?
>


Полагаю, что и был изначально Фортран.


> > Еще проще было возбудить исключение и обработать его в
> try.
> > .except
>
>
> За это надо убивать. Медленно и с наслаждением


Позови, когда будет случай :)


 
Verg   (2009-11-05 18:08) [77]


> С бейсика переписывали?

Это индусский подход. Это нормально.


 
Игорь Шевченко ©   (2009-11-05 18:12) [78]

Jeer ©   (05.11.09 18:07) [76]


> Полагаю, что и был изначально Фортран.


Я подобных алгоритмов воз и маленькую тележку видел. В книжках, специально издавались, кому надо - тот набьет. Разумеется, на фортране, так как вся научная мысль 60-80-ых годов именно на нем и реализовывалась. Потому и говорю - может, лучше на фортране ? Написать переходник для сопряжения паскаля с фортраном, вроде зло не столь большой руки.


 
Jeer ©   (2009-11-05 18:15) [79]


> Потому и говорю - может, лучше на фортране ?


Дык не ко мне вопрос - это НИИ ВЦ МГУ публикует свою библотеку.
Раньше у них был только фортран и Си вариант, сейчас добавили Паскаль.


 
GDI+   (2009-11-05 19:56) [80]

try
...
except end;

надо сразу вешать за все выступающие части, если не написан подробный комментарий, почему в данном богоизбранном участке кода все без исключения исключения (пардон за тавтологию) должны игнорироваться


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



Страницы: 1 2 3 вся ветка

Текущий архив: 2010.01.03;
Скачать: CL | DM;

Наверх




Память: 0.65 MB
Время: 0.014 c
2-1257950877
Alexey
2009-11-11 17:47
2010.01.03
Поток, передача параметра в onTerminated


15-1257150981
Kolan
2009-11-02 11:36
2010.01.03
Форма Т-12


15-1257334588
XXL
2009-11-04 14:36
2010.01.03
Сантехники от программирования - нужны ли они ?


15-1257179327
Sergey Masloff
2009-11-02 19:28
2010.01.03
Ищу утилиту для поиска дубликатов. Нужен совет


1-1232695597
yurik85
2009-01-23 10:26
2010.01.03
Изменение данных в текстовом файле