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

Вниз

Goto in Delphi   Найти похожие ветки 

 
clickmaker ©   (2011-02-23 13:54) [40]

> однажды я проснулся и понял, что goto - это реально плохая
> вещь. Тогда я взял весь java-код в мире, и выбросил оттуда
> все goto. Это заняло пару часов

с бодунища и не такое сделаешь


 
Inovet ©   (2011-02-23 14:07) [41]

> [40] clickmaker ©   (23.02.11 13:54)
> с бодунища и не такое сделаешь

Где убрал - забыл, и резервную копию забыл сделать. С тех пор в java нет goto.


 
DiamondShark ©   (2011-02-23 14:24) [42]


> goto удобен тут для кодирования state-машины

Для кодирования state-машины goto не нужен вообще никак.


 
Игорь Шевченко ©   (2011-02-23 14:33) [43]

как сказано в одном из комментов к


> http://habrahabr.ru/blogs/development/114326/


"goto — инструмент. Лучше учиться, как им правильно пользоваться, чем его избегать. "

с этой точкой зрения я согласен целиком и полностью.


 
DiamondShark ©   (2011-02-23 14:34) [44]


> goto — инструмент

Грабли -- тоже инструмент.


 
clickmaker ©   (2011-02-23 14:39) [45]

> Грабли -- тоже инструмент

так же как молоток, дрель и бензопила "Дружба". И что? Если не разбрасывать, где ни попадя и не юзать с перепоя, то вполне себе жить можно


 
asail ©   (2011-02-23 14:52) [46]


> DiamondShark ©   (23.02.11 14:34) [44]

> Грабли -- тоже инструмент.

Весьма, кстати, полезный...

По сабжу, лет эдак 5-6 не возникало необходимость в Goto. Ни разу. Вот так, чтоб без него ну совсем плохо было бы. Но, вполне допускаю ситуации, где сие чудо могло бы пригодиться.
А вот, Exit использовал часто, но осторожно. Как правило, исключительно в начале функций для проверки вводных. Чтоб лишних блоков begin..end не городить.


 
Anatoly Podgoretsky ©   (2011-02-23 15:26) [47]

> palva  (23.02.2011 13:29:36)  [36]

Любой программист должен уметь не программировать в таком стиле


 
Фокс Йовович   (2011-02-23 15:39) [48]

goto полезен для выхода из кучи вложенных циклов


 
KilkennyCat ©   (2011-02-23 18:14) [49]

а в асме ваще все плохо.


 
Mystic ©   (2011-02-23 18:30) [50]


> Для кодирования state-машины goto не нужен вообще никак.


Тогда часто теряется вся наглядность.


 
asail ©   (2011-02-23 19:39) [51]


> Фокс Йовович   (23.02.11 15:39) [48]

Abort, как правило, достаточно...


 
QAZ   (2011-02-24 12:18) [52]

а я обожаю связку иф\тхен+гото :)
сильно упрощает многие алгоритмы,а также делаем простые алгоритмы более продвинутыми и универсальными


 
Григорьев Антон ©   (2011-02-24 12:53) [53]


> Anatoly Podgoretsky ©   (23.02.11 13:03) [35]
> > Alkid  (23.02.2011 12:52:33)  [33]
>
> А Вирт слабак

А вот и нет. Вирт выбросил goto из своего Оберона, который вышел в 1988 году. Разработка Java началась только в 1990 году, так что Вирт был раньше. Кстати, апологеты Оберна утверждают, что авторы Java очень активно изучали опыт Оберона и даже приглашали разработчиков этого языка для консультаций, но теперь от этого открещиваются.

А ещё в Обероне Вирт выкинул оператор for, сказав, что while его вполне заменяет. Правда, в Обероне-2 ученики Вирта for восстановили, неудобно без него.


 
Anatoly Podgoretsky ©   (2011-02-24 14:05) [54]

> Григорьев Антон  (24.02.2011 12:53:53)  [53]

Разброд и шатание


 
oldman ©   (2011-02-24 16:06) [55]

Эх... Вспоминаю PL... Структурированный язык... Goto запрещен в принципе...
И ведь обходились!


 
Игорь Шевченко ©   (2011-02-24 16:28) [56]


> Вспоминаю PL


в PL/1 goto был


 
Anatoly Podgoretsky ©   (2011-02-24 16:34) [57]

> oldman  (24.02.2011 16:06:55)  [55]

Чтобы обходиться без Goto запрет не нужен


 
И. Павел ©   (2011-02-24 19:41) [58]

А мне еще в школе учительница по программированию (самая первая и самая лучшая :) изначально не рассказывала про goto. Поэтому я привык без него обходиться. Ни разу в жизни не использовал. Если не считать маленькие программки на assembler. Хоть и не считаю единичные goto смертным грехом.

А в JAVA можно давать названия блокам. Это помогает делать break и continue из вложенного цикла без вспомогательных средств и без goto. Вообще в этом языке много старых камней преткновения сгладили. Надеюсь, новых меньше добавили :)


 
KilkennyCat ©   (2011-02-24 19:55) [59]

конструкция begin...end вызывает сомнений не меньше, чем Goto.


 
Дмитрий Тимохов   (2011-02-25 01:03) [60]

a вот начал пользоваться - очень удобная штука, если, конечно, не читать, форумы с ассами программирования в дельфи


 
KilkennyCat ©   (2011-02-25 01:59) [61]

ассы - это хорошо сказано :)


 
Григорьев Антон ©   (2011-02-25 06:58) [62]


> KilkennyCat ©   (25.02.11 01:59) [61]
> ассы - это хорошо сказано :)

Это ещё Архангельский придумал, см. http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1082


 
Alkid ©   (2011-02-25 10:47) [63]


> Игорь Шевченко ©   (23.02.11 13:42) [37]
> Много где нету. И много где есть. И что с того ? :)

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


 
oxffff ©   (2011-02-25 10:58) [64]

goto наше все.
Без безусловного перехода никуда.
(назовите это jmp(x86), br(MSIL), goto(high level language)).


 
Alkid ©   (2011-02-25 12:31) [65]


> oxffff ©   (25.02.11 10:58) [64]
>
> goto наше все.
> Без безусловного перехода никуда.
> (назовите это jmp(x86), br(MSIL), goto(high level language)).

Это зависит от выразительных средств языка.


 
oxffff ©   (2011-02-25 12:39) [66]


> Alkid ©   (25.02.11 12:31) [65]
>
> > oxffff ©   (25.02.11 10:58) [64]
> >
> > goto наше все.
> > Без безусловного перехода никуда.
> > (назовите это jmp(x86), br(MSIL), goto(high level language)).
>
>
> Это зависит от выразительных средств языка.


Он все равно присутствует в явном или не явном виде(не буквально).
Например в виде break, exit, raise.


 
RWolf ©   (2011-02-25 12:57) [67]

всё дело в семантике операции.
break и прочие означают не то же самое, что goto, хоть и транслируются в такой же переход.
и это сильно помогает читать программу, а значит, улучшает код.


 
KilkennyCat ©   (2011-02-25 13:01) [68]

это брек-то помогает читать код? особенно в сравнении с гоуту??


 
Inovet ©   (2011-02-25 13:04) [69]

> [68] KilkennyCat ©   (25.02.11 13:01)
> это брек-то помогает читать код? особенно в сравнении с гоуту??

А нет? Break досрочный выход в известое место, а goto фиг знает куда может выйти.


 
KilkennyCat ©   (2011-02-25 13:11) [70]

никогда не слышал о гоуту с рандомным переходом


 
RWolf ©   (2011-02-25 13:20) [71]

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


 
KilkennyCat ©   (2011-02-25 13:32) [72]

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


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


 
KilkennyCat ©   (2011-02-25 13:34) [73]

хотя, может это мне легко... я недалеко от бейсика ушел.


 
Компромисс   (2011-02-25 13:51) [74]

начало цикла
 гоуту на некакую-то хрень
конец цикла
какая-то хрень.
некакая-то хрень


Почти спагетти получилось. Явно напрашивается функция

Найди_хрень
начало цикла
 return найденная хрень
конец цикла
return null

с очевидным использованием
хрень = Найди_хрень
if(хрень != null){
 обработай хрень
}
...


 
Компромисс   (2011-02-25 13:52) [75]

Точнее
хрень = Найди_хрень
if(хрень == null){
обработай отсутствие хрени
}
...


 
oxffff ©   (2011-02-25 14:28) [76]


> RWolf ©   (25.02.11 12:57) [67]
> всё дело в семантике операции.
> break и прочие означают не то же самое, что goto, хоть и
> транслируются в такой же переход.
> и это сильно помогает читать программу, а значит, улучшает
> код.


Не о ней речь. А вообще о безусловных переходах.

Но если рассуждать по Вашему, то например raise опасней goto, поскольку
в goto переход статичен, а  raise позволяет не только выпругныть через несколько процедур, но выпригивать из одной и той же процедуры в разные места. Страшно? Но ведь используем.


 
KilkennyCat ©   (2011-02-25 15:08) [77]

а некоторые пишут условный переход, в котором условие всегда будет одно. своего рода гоуту :) хоть и в результате неграмотности.


 
Jeer ©   (2011-02-25 15:32) [78]


> KilkennyCat ©   (25.02.11 13:11) [70]
>
> никогда не слышал о гоуту с рандомным переходом


Мы делали так:
Если в некоторой функции, в предпоследней строчке есть вызов другой функции, то вместо конструкции

CALL SUBFUNC
RET

мы делали

JMP SUBFUNC

Мелочь, а приятно.


 
Inovet ©   (2011-02-25 16:07) [79]

> [78] Jeer ©   (25.02.11 15:32)
> Мелочь, а приятно.

Экономили такты и стек.:)


 
KilkennyCat ©   (2011-02-26 16:27) [80]


>
> Экономили такты и стек.:)

ну так, старая школа, сразу видно.
а сейчас  винчестеры большие, памяти до дури, процессоры с ядрами.



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

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

Наверх




Память: 0.63 MB
Время: 0.013 c
2-1299963558
Artemon
2011-03-12 23:59
2011.06.19
QueryPerfomanceCounter


1-1257493538
harisma
2009-11-06 10:45
2011.06.19
Использование JVCL компонент в DLL


8-1212651799
Феликс
2008-06-05 11:43
2011.06.19
WMF. Переформулирую вопрос


2-1300038548
Тони
2011-03-13 20:49
2011.06.19
Firebird


2-1299845657
SIV5000
2011-03-11 15:14
2011.06.19
TObjectList и его размер