Форум: "Прочее";
Текущий архив: 2010.01.03;
Скачать: [xml.tar.bz2];
ВнизСантехники от программирования - нужны ли они ? Найти похожие ветки
← →
@!!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;
Скачать: [xml.tar.bz2];
Память: 0.63 MB
Время: 0.009 c