Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Чем плох безусловный переход?? / 25 сообщений из 109, страница 1 из 5
15.03.2005, 15:31
    #32961161
buffoon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
Сабж собссно..
...
Рейтинг: 0 / 0
15.03.2005, 15:40
    #32961195
buffoon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
чем плохо использовать в программе безусловный переход к метке??
типа goto мояметка
...
Рейтинг: 0 / 0
15.03.2005, 15:45
    #32961213
Сахават Юсифов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
Ничем.
...
Рейтинг: 0 / 0
15.03.2005, 15:48
    #32961225
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
Плохой читаемостью программы (когда таких переходов несколько) и как следствие, увеличение числа ошибок и затруднение диагностики.
...
Рейтинг: 0 / 0
15.03.2005, 16:07
    #32961313
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
Особенно, когда переходы не только вперед, но и назад


PS Когда-то видел программу на древнем BASIC, в котором еще не было процедур и проблема решалась путем GOTO на первый оператор "процедуры" с последующим возвратом с последнего оператора к месту вызова. Читабельность - обалденная, без раскраски не разберешся


PPS В некоторых случаях подобные операторы допустимы, например, для выхода из нескольких вложенных циклов наружу (в Oracle PL/SQL такое есть), но лучше подобными вещами пользоваться пореже (лично я не пользуюсь совсем)
...
Рейтинг: 0 / 0
15.03.2005, 17:07
    #32961533
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
Позвольте несколько слов в защиту goto.

1) Иногда без него трудно обойтись. К примеру, довольно трудно выйти из двух и более вложенных циклов без использования goto.
2) Без него не будет полиморфизма.
3) Целевой машинный код в конечном счете будет содержать goto, какие-бы вы не использовали структурно-обьектно-функциональные компилляторы.
4) Некоторые считают что структурное программирование - это отсутствие операторов goto. Но на самом деле, если вы пишете код и не используете этот оператор из этого вовсе не следует что вы - структурно программируете.
...
Рейтинг: 0 / 0
15.03.2005, 18:07
    #32961686
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
Сам по себе goto не плох, но совет обходиться без него умный. Без него можно обойтись, поэтому если кажется, что он нужен, значит, структура программы плохо продумана. Когда стараешься обходиться без goto, то приучаешь себя лучше представлять структуру программы, что ведёт к повышению мастерства программирования. Это главное, устальные доводы за и против менее существенны.

Второе основание - программисты высокой квалификации обычно обходятся без него. Поэтому если такой увидит у небя gotы, то это произведёт плохое впечатление.


1) Иногда без него трудно обойтись. К примеру, довольно трудно выйти из двух и более вложенных циклов без использования goto.

Не трудно, используя вспомогательную переменную. Однако если язык программирования поддерживает разновидность, goto специально для этого случая, то пользоваться им следует.


2) Без него не будет полиморфизма.

Не берусь предполагать, что должно означать это заявления. Кому нужен полиморфизм, лучше пользоваться языком, имеющим поддержку объектно-ориентированного программирования. Тогда goto опять будет не нужен.


3) Целевой машинный код в конечном счете будет содержать goto, какие-бы вы не использовали структурно-обьектно-функциональные компилляторы.

А это никого не волнует.


4) Некоторые считают что структурное программирование - это отсутствие операторов goto. Но на самом деле, если вы пишете код и не используете этот оператор из этого вовсе не следует что вы - структурно
программируете.

Выше я попытался объяснить своими словами и на своём опыте, почему полезно учиться обходиться без goto. Не "некоторые считают, что...", а это просто афоризм, в котором это имееется ввиду. Он конечно не охватывает всех приёмов структурного программирования.
...
Рейтинг: 0 / 0
15.03.2005, 18:41
    #32961766
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
mayton1) Иногда без него трудно обойтись. К примеру, довольно трудно выйти из двух и более вложенных циклов без использования goto.
Некоторые языки поддерживают соответствующую форму break. Кроме того, практически всегда хватает уже существующих флаговых переменных итп.

mayton2) Без него не будет полиморфизма.
Можно расшифровать?

mayton3) Целевой машинный код в конечном счете будет содержать goto,
Цель - не в том, чтобы удалить его из машинного кода. Цель - писать "хорошие" в некотором смысле программы.

Лично я, если не изменяет память, не использовал goto с тех пор, как появилось finally (там, где оно появилось). Это было последнее специализированное решение, закрывшее нишу для "общего" goto на уровне выше ассемблера.

mayton4) Некоторые считают что структурное программирование - это отсутствие операторов goto. Но на самом деле, если вы пишете код и не используете этот оператор из этого вовсе не следует что вы - структурно программируете.
Это факт. Я на RSDN как-то развлекся тем, что показал пример абсолютно классического спагетти-кода, использующего только while/if.
...
Рейтинг: 0 / 0
15.03.2005, 18:43
    #32961773
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
Partisan MНе берусь предполагать, что должно означать это заявления. Кому нужен полиморфизм, лучше пользоваться языком, имеющим поддержку объектно-ориентированного программирования. Тогда goto опять будет не нужен.
Для реализации полиморфизма (на не ОО-языке) goto не нужен. Более того, рискну сказать, что им невозможно реализовать полиморфизм, оставаясь в то же время в рамках общей концепции ООП.
...
Рейтинг: 0 / 0
15.03.2005, 18:47
    #32961781
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
buffoonчем плохо использовать в программе безусловный переход к метке?? типа goto мояметка
Одним: к настоящему моменту для всех (обычных) задач, где это требовалось, есть лучшие решения. Соответственно, если речь не идет о низкоуровневом программировании (включая сюда тщательную оптимизацию), и не идет о языках, не поддерживающих необходимые конструкции - следует применять именно эти, лучшие решения.
...
Рейтинг: 0 / 0
15.03.2005, 19:11
    #32961822
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
Если полезть в историю, то я читал, что особенные войны с goto начались тогда, когда выяснилось, что первые компиляторы паскаля обладали серьезной глючностью с серией goto (сам я в эту версию не верю)

К вопросу о элегантности: действительно ли goto хуже, чем куча флагов в тройном цикле? Тем более, что чем больше на цикле условий, тем медленне он. Лучше уж один понятный goto.

________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
15.03.2005, 20:05
    #32961921
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
много лет пишу на delphi и с++.
goto использовал в delphi может быть раза два.
и то, по глупости.

но идея такова - если надо, goto не табу, но надо ли?

автор
К вопросу о элегантности: действительно ли goto хуже, чем куча флагов в тройном цикле? Тем более, что чем больше на цикле условий, тем медленне он. Лучше уж один понятный goto.
к вопросу об элегантности.
элегантна ли конструкция из трех циклов с произвольным завершением какого либо из них?
...
Рейтинг: 0 / 0
15.03.2005, 20:25
    #32961942
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
А вы приведите код, когда goto необходим и нельзя обойтись другими средствами. Вам же ясно объяснили все плюсы/минусы goto и в каких случаях его есть смысл использовать.
...
Рейтинг: 0 / 0
15.03.2005, 21:32
    #32961986
# Darth Vader #
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
Гоуту есть конечно за что ругать. Но все таки есть ситуёвины когда он незаменим. Например выход из цикла или вложенного цикла. При определенных условиях break / continue не катят. Вот когда часто используем гоуту - то это считается плохим стилем. Но я часто использую гоуту потому , что он позволяет упростить все таки некотрые участки кода, хоть и говорят , что он ведет к плохой читабельности программы. Да , ведет , но когда много меток используют...
...
Рейтинг: 0 / 0
15.03.2005, 22:46
    #32962010
VidmakCase
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
Я лично далеко не могу назвать себя опытным программистом. Но goto не использовал никогда. (Не вру.. в 3-м класе, када BASIC учил и еще када на асме что-от там пытался состряпать).
И мне например сложно представить ситуацию когда он действительно нужен...
Тут вот говорили во вложеных цыклах. Я не вижу проблемы.

Еще прозвучало мнение, что вешать дополнительные условия на циклы нехорошо. В плане скорости или как? Тогда возникает вопрос а что в цикле вы goto без проверки условия выполяете?
Хотелось бы увидеть пример который нельзя (неудобно/медленно) зделать без goto?

Думается мне что даже на асме можно без него обойтись. : (Но тут я не уверен).
...
Рейтинг: 0 / 0
15.03.2005, 22:48
    #32962013
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
alex_k
элегантна ли конструкция из трех циклов с произвольным завершением какого либо из них?

Завершение очень даже не произвольное, а совершенно читабельное.
Использовать можно все, главное к месту и в меру, чтобы это не вредило читабельности.
Сейчас затрудняюсь найти, но видел тексты, которые были написаны по всем правилам структурного программирования, даже слишком по провилам и данные произведения были совершенно нечитабельны, никакой goto не сравнится.

Просто у многих людей живет какое-то религиозное предубеждение против GOTO, обоснованное обычно просто тем, что "GOTO писать плохо"
...
Рейтинг: 0 / 0
15.03.2005, 23:24
    #32962031
Сахават Юсифов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
VidmakCase
Думается мне что даже на асме можно без него обойтись. : (Но тут я не уверен).

И правильно!
...
Рейтинг: 0 / 0
15.03.2005, 23:35
    #32962035
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
Сахават Юсифов VidmakCase
Думается мне что даже на асме можно без него обойтись. : (Но тут я не уверен).

И правильно!

И как же? Или вы считаете, что условный переход -- это что-то другое?
...
Рейтинг: 0 / 0
16.03.2005, 00:36
    #32962056
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
alex_k
goto использовал в delphi может быть раза два.
и то, по глупости.

но идея такова - если надо, goto не табу, но надо ли?

как то раз я пытался автомат изобразить.
есть последовательность экранных форм {f1, f2, f3,...,fn}
и надо записать переходы при нажатии соответствующих кнопок на
из любого на f1
из любого на fn
из fk на fk-1
из fk на fk+1

по-моему, писать это структурными операторами (for, while) жутко не удобно.
с гото тескт получался проще.
а графический R-язык, разработанный в 80 годы в институте
кибернетики им. Глушкова в отделе Вельбицкого был в самый раз.
-)))))
...
Рейтинг: 0 / 0
16.03.2005, 08:25
    #32962151
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
помню , раньше тоже юзал goto на паскале немножко ,
потом приходилось пользоваться на ассемблере , ну там уже никуда без него .

сейчас вообще goto не пользуюсь ,


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
16.03.2005, 11:25
    #32962673
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
Я только один случай знаю, где использование GOTO оправдано в целях эффективности и читабельности. Соответственно, только в этом случае и использую. Случай такой: выход из множественного цикла по какому-то условию, если при этом условии также нужно опустить часть кода после цикла.

for ...
for ...
if .... then GOTO METKA
next
next
............<несколько строк кода>
METKA:

Да, и то, только в том случае, если выброс исключения с его отловом не представляется более красивым.
...
Рейтинг: 0 / 0
16.03.2005, 12:15
    #32962901
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
Вижу завязалась полемика.
Ну что-ж. Скажу свое мнение.

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

1) Господит Softwarer упомянул об использовании оператора break. Рассмотрим пример разрыва цикла по условию. Для реализации возьмем С-подобный язык.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int a[ 10 ];

// инициализация вектора A

for(int i= 0 ;i< 10 ;i++)
{
	if (condition(a[i])) break;
}

Что-ж неплохо.

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
int a[..][..][..];

// инициализация трехмерного вектора A

bool iscondition=false;

for(int i= 0 ;i< 10 ;i++)
{
 for(int j= 0 ;j< 10 ;j++)
 {
  for(int k= 0 ;k< 10 ;k++)
  {  
   if (condition(a[i][j][k])){
      iscondition=true;
      break;
   }
  }
  if (iscondition) break;
 }
 if (iscondition) break;
}

Довольно странно. Правда? Появились избыточные синтаксические конструкции .. со всеми вытекающими последствиями, глюками, очепятками. И это - плата за так называемый структурный подход. Можно проверку условия condition() вставить в выражение for, но от этого тоже мало что изменится. Код по прежнему неудобочитаем.

Даже если предположить что существует некий оператор breakAll который разрывает выполнение вложенных циклов, в конечном счете он будет реализован как переход по метке.

2) Отвечаю на вопрос, касаемо полиморфизма.

Классический С обладал его зачатками. Достаточно вспомнить как спользовались "указатели на функции". Фактически это была попыта сделать goto управляемым на этапе выполнения (позднее связывание).

Когда в С++ вы создаете обьект с виртуальными методамми, автоматически к нему прикрепляется указатель на таблицу виртуальных функций. Фактически таблица содержит адреса переходов (на самом деле адреса команд call) на реализации самих функций для данного обьекта. Это суть - безусловный переход на вызов метода.

Когда вы создаете вектор указателей на обьекты то это можно интерпретировать как: создать множество операторов goto на ... данные.

И здесь без безусловных переходов не обойтись.

В заключение хочу сказать.

- Используйте goto только там где без него нельзя обойтись.
- Не берите на себя роль священной инквизиции, пытаясь утвердить какие-либо каноны в программировании. Ни к чему все это.
...
Рейтинг: 0 / 0
16.03.2005, 12:46
    #32963061
VidmakCase
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
Lelikk Сахават Юсифов VidmakCase
Думается мне что даже на асме можно без него обойтись. : (Но тут я не уверен).

И правильно!

И как же? Или вы считаете, что условный переход -- это что-то другое?

Ну как бы да...Как я понимаю речь в топике идет о БЕЗУСЛОВНОМ ПЕРЕХОДЕ.
И я пока не могу представить ситуацию на асме где мне потребовалось бы jmp.
(Не могу наверное потому, что на Асме чичего не пишу уже давно... С тех пор как пытался написать всою ОС (Я думаю такая заморочка была не у меня одного.))

Но вообще то принципиальной разници нету. Преход себе и все, что jmp что je какой-нть.

Я таки хочу увидеть пример когда БЕЗУСЛОВНЫЙ переход выглядить красиво, просто, нужно... Хоть как-то?
...
Рейтинг: 0 / 0
16.03.2005, 12:51
    #32963076
VidmakCase
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
JibSkeartпомню , раньше тоже юзал goto на паскале немножко ,
потом приходилось пользоваться на ассемблере , ну там уже никуда без него .

Ну я бы не согласился с мнением "никуда без него".
О! Вот помню где надо - это загрузочный сектор дискеты... Там первая JMP стоит, которая перепрыгиват через данные о дискетке на код
...
Рейтинг: 0 / 0
16.03.2005, 13:00
    #32963110
aZm
aZm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем плох безусловный переход??
Тем и плох, что понять логику приложения труднее.

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

---
Vae victis!
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Чем плох безусловный переход?? / 25 сообщений из 109, страница 1 из 5
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]