Форум: "Потрепаться";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];
ВнизGoto Найти похожие ветки
← →
Song (2002-04-15 11:16) [0]Как многоуважаемый ALL относится к данному оператору? Нас учили, что пользоваться Goto плохо, это мол типа слабость программиста. Однако иногда он очень удобен для повышения читабельности кода и уменьшения ветвлений.
У кого какое мнение?
← →
SB.John (2002-04-15 11:24) [1]Я им не пользуюсь, но не потому что это некорректный стиль программирования - иногда goto действительно удобнее. Просто в Паскале для него нужно метки объявлять заранее, а это лениво как-то. К тому же вместо goto очень удобно пользоваться всякими
continue, exit,halt,abort .
← →
Виктор Щербаков (2002-04-15 11:27) [2]
> Однако иногда он очень удобен для повышения читабельности
> кода и уменьшения ветвлений.
Гм. А пример можно? Просто пока сложно представить такую ситуацию.
Страуструп оправдывал применение goto для выхода из вложенных циклов. Действительно очень эффективно, но это на C++.
А вообще у меня алергия на goto появилось после перевода достаточно большой проги с Фортрана. Видели когда нибудь вычисляемый goto в Фортране или Бэйсике? Оооо... Лучше таких ужасов не видеть!
← →
VictorT (2002-04-15 11:31) [3]>Страуструп оправдывал применение goto для выхода из вложенных циклов. Действительно очень эффективно, но это на C++.
Кстати тут удобно применять, например, исключения.
← →
Виктор Щербаков (2002-04-15 11:34) [4]VictorT © (15.04.02 11:31)
Согласен. Просто это неочевидное их применение.
PS: Это еще раз доказывает избыточность конструкции goto.
← →
Anatoly Podgoretsky (2002-04-15 11:41) [5]Вирт признавался, что у него рука не поднялась на исключение GOTO из языка.
← →
VictorT (2002-04-15 11:59) [6]А как насчёт Ассемблера? Обойдёмся без переходов?
← →
Song (2002-04-15 13:11) [7]Сейчас прямо наверно пример не привести, но иногда лечге засадить переход, чтобы "не колдовать" :)
Я не говорю, чтобы его писать через строчку, а так иногда.
А кто скажет, с точки зрения получаемого в результате машинного кода - применение goto как сказывается на скорости и простоте кода, его эффективности?
← →
Anatoly Podgoretsky (2002-04-15 13:17) [8]VictorT © (15.04.02 11:59)
А ассебмлеры используются алиасы для машинных команд
← →
VictorT (2002-04-15 13:23) [9]>А ассебмлеры используются алиасы для машинных команд
алиасы - в смысле мнемонические обозначение? Если да, то я в курсе. Я к тому, что там все ветвления, циклы и т.д. реализуются через переходы. Кстати я програмирование начинал с Бейсика, и когда переходил на Асм, то это мне помогло (в смысле Бейсик).
← →
Anatoly Podgoretsky (2002-04-15 13:39) [10]Да я специально применил такой термин, что бы подчеркнуть
← →
Андрей Сенченко (2002-04-15 19:49) [11]А что Вы так на него набросились ?
Между прочим полезнейшая вещь в плане психологической обработки :)
1. Выполняет роль спасательного круга, надежно прибитого к стенке гальюна. В том плане, что ежели уж совсем кранты - отдерешь как миленький и воспользуешься по полной программе. Главное в этом деле - знать что он есть и испытывать по этому поводу комфортные ощущения в области подкорки.
2. Надежность той самой прибивки к стенке гарантируется всеобщим презрением к коду с GOTO и мнением, что "это не есть хорошо". В самый последний момент, когда казалось бы все тонет, все из всех пробоин течет и пора за ним бежать - вспоминаешь, что "это не есть хорошо" и идешь латать те самые пробоины собственными руками.
Стимулирует однако.
← →
copyr25 (2002-04-15 22:15) [12]Go to незаменим, если Вы программируете .dpr.
Без VCL, в частности, без таймера.
← →
copyr25 (2002-04-15 22:20) [13]>Вирт признавался, что у него рука не поднялась на исключение GOTO из языка.
И правильно. Создатель Паскаля, иначе бы, растерял 50% почитателей. Метка и посылка
на нее - почти единственный выход из запутанной ситуации:)))
← →
ION T (2002-04-15 22:26) [14]А я со времен появления объектного паскаля про гото и не вспоминал:) Я даже уверен что label и goto - единственные киворды которые я никогда не использовал в оПасе (ну разве, что ещё архаический inline)
← →
arbiter (2002-04-17 02:08) [15]Между прочим тот самый Вирт удалил GoTo из двух своих последующих языков.
Даже у меня где то валяется строгое доказательство избыточности этого оператора, поищу если найду кину.
← →
Voldemar (2002-04-17 04:27) [16]В какой-то книжке по программированию было написано, что процедура, в которой больше одного Goto похожа на блюдо с макаронами...
А вообще - иногда приходится пользоваться, к счастью - редко.
← →
MBo (2002-04-17 06:22) [17]У меня GOTO встречается только в переведенных с Фортрана алгоритмах, и то в местах с нетривиальной логикой.
← →
Praco (2002-04-17 09:11) [18]А я на Паскале ни разу в жизни не применил GOTO. Впрочем, видел очень уважаемых программеров, применявших и весьма часто.
← →
evgeg (2002-04-17 10:01) [19]Страуструп оправдывал применение goto для выхода из вложенных циклов.
Так можно делать в С, но не в современном С++.. Если в блоке цикла объявлен объект, его деструктор не вызовется при выходе с помощью goto.
← →
Alx2 (2002-04-17 10:11) [20]Интересно, есть ли у кого кусок кода с Goto, который при изъятии оного теряет свою ясность и лаконичность?
← →
Виктор Щербаков (2002-04-17 10:11) [21]evgeg © (17.04.02 10:01)
> Если в блоке цикла объявлен объект, его деструктор не вызовется
> при выходе с помощью goto.
Еще один аргумент против goto. Да и орпавдание это я видел лишь в первом издании книги Страуструпа. В языке еще не было обработки исключений, и по другому эффективно выйти из цикла - ну никак...
← →
VictorT (2002-04-17 10:21) [22]Приведу пару цитат из книги В.Ф. Очкова, Ю.В Пухначёва "128 советов начинающему программисту":
При написании программ используй семь и не более управляющих конструкций, изменяющих естественный ход выполнения операторов:
1) цикл "пока";
2) альтернативу;
3) множественное ветвление;
4) цикл "до";
5) цикл с параметром;
6) вызов процедуры (подпрограммы);
7) переход к метке. ......
Если программирование можно уподобить игре на семиструнной гитаре, то вот те струны, рождающие мелодию
← →
evgeg (2002-04-17 10:23) [23]> Alx2
Да тот же пример с goto в несеольких влож. циклах. Сравните (классический Паскаль без исключений):
for i := 1 to n1 do
for j := 1 to n2 do
for k := 1 to n3 do
for h := 1 to n4 do
begin
...
if (...) then
goto lab1;
end;
lab1:
i := 1;
fl := true;
while fl and (i <= n1) do
begin
j := 1;
while fl and (j <= n2) do
begin
k := 1;
while fl and (k <= n3) do
begin
h := 1;
while fl and (h <= n4) do
begin
....
fl := not (...);
inc (h);
end;
inc (k);
end;
inc (j);
end;
inc (i);
end;
← →
Alx2 (2002-04-17 10:54) [24]Да уж. Лаконичность отдыхает :(
I := 1;
J := 1;
K := 1;
H := 1;
While (I <= n1) and (not condition(i,j,h,k)) Do
Begin
inc(H);
If H > n4 Then
Begin
H := 1;
inc(K);
If K > n3 Then
Begin
K := 1;
inc(J);
If J > n2 Then
Begin
J := 1;
inc(I);
End;
End;
End;
End;
← →
Desdechado (2002-04-17 11:15) [25]Как говорил один мой преподаватель программирования лет 10 назад:
"Вообще-то нельзя, но если очень хочется, то можно".
Правда, это было сказано по другому поводу, но может быть расширено и обобщено на предмет обсуждения (и многие другие жизненные ситуации :))
Сам я уже давно не использую GOTO, просто нет надобности. Но никакого предубеждения нет. Все крайности вредны, в т.ч. с безапелляционным откидыванием языковых конструкций.
← →
Alx2 (2002-04-17 11:26) [26]Согласен. Но иногда бывает интересно поизвращаться
← →
evgeg (2002-04-17 11:37) [27]Ваш пример немного выигрывает у примера с while по кол-ву вычислений лог. выр-й, он длиннее на одну строку (если учесть ..., которое в примере с while означает вып-е каких-то полезных действий), а по понятности он значительно проигрывает примеру с while.
Оба они проигрывают и по эффективности, и по длине, и по понятности примеру с goto.
← →
vuk (2002-04-17 11:58) [28]to evgeg:
>Да тот же пример с goto в несеольких влож. циклах. Сравните
>(классический Паскаль без исключений):
А теперь то же самое, но без goto
procedure DoSomething;
var
i, j, k, h : integer;
begin
for i := 1 to n1 do
for j := 1 to n2 do
for k := 1 to n3 do
for h := 1 to n4 do
begin
...
if (...) then
exit;
end;
end;
Если нужно, то такая пороцедура делается вложенной. Точно так же во вложенную процедуру может быть вынесен любой из вложенных циклов.
← →
evgeg (2002-04-17 12:23) [29]> vuk
В Паскале да, а вот в С вложенных процедур нет.
← →
evgeg (2002-04-17 12:24) [30]> vuk
Все таки с goto нагляднее и понятнее получается и в Паскале.
← →
evgeg (2002-04-17 12:26) [31]Когда все циклы выносим вызов процедуры происходит один раз - ерунда, а вот когда вложенные - затраты на вызов процедуры могут скзаться на скорости.
← →
Agent Smith (2002-04-17 19:10) [32]Я, кстати в одной своей проге довольно часто использовал goto. Когда писал свой (не стандартный)поиск.
← →
anpsoft (2002-04-18 02:52) [33]я навпример вижу один случай когда без goto лучше не надо :)
это программы полученные при помощи генераторов кода, и как частный случай (но очень поучительный), результат работы программ типа yacc на pascal. Там их сотни могут быть.
Видать удобочитаемый текст скорее всего нельзя, да и не нужно.
Его только компилятор читать будет.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.007 c