Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1258047678
AntonioBanderas
2009-11-12 20:41
2010.01.03
Игра пятнашки


1-1231762680
WanderBuild
2009-01-12 15:18
2010.01.03
Нужна помощь по работе с ресурсами (конкретно RT_VERSION)


15-1257163293
БарЛог
2009-11-02 15:01
2010.01.03
Опыт использования движков сайтов


2-1258041289
Zahar
2009-11-12 18:54
2010.01.03
Занят ли файл


2-1258031986
Zhanna
2009-11-12 16:19
2010.01.03
Сортировка файла по дате





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский