powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Чем плох безусловный переход??
25 сообщений из 109, страница 2 из 5
Чем плох безусловный переход??
    #32963122
Фотография VidmakCase
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВижу завязалась полемика.

Для случая с многомерным вектором придется немного извратится. Поскольку 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, но от этого тоже мало что изменится. Код по прежнему неудобочитаем.


Абсолютно с вами соглсен, касательно этого кода.
У меня такой вопрос. Просто не могу представить зачем надо такая конструкция? А если могу, то почему ее неьзя засунуть в процедуру и написать внутри выход из процедуры.

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

Вообщем не хочу дальше показывать свое возможное ламерство. Но в заключение скажу, по моему таки GOTO не у прощает а усложняет код, (в крайнем случае для понимания)
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32963175
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Код: 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;
}
...
И это - плата за так называемый структурный подход.
...
Код по прежнему неудобочитаем.


Поэтому в замечательном языке java есть форма записи break/continue metka;
В этой записи явно говориться из какого цикла выйти и итерацию какого цикла продолжить. При этом break/continue это ни аналоги goto, т.к. goto просто показывает "куда идти".
Как мне кажется, в этом случае никакой "платы за структурный подход" делать не приходится, всё читаемо :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
boolean iscondition=false;
firstFor: 
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 firstFor;
            }
        }
   }
}
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32963296
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посностью согласен!

Но вопрос муссировался в контексте C++/Delphi как следует из вышеуказанных постов.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32963350
eys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Це#

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

:) Щютка, хотя в каждой шутке .... :)
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32963831
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
щюта щюткой, однако сам так делал на с++ :-)
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32963924
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Частный случай однако.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32963951
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не плохо и ни хорошо, это возможность языка.
Из личного опыта - был случай, когда стоял выбор - реализовать функцию с использованием и без использования goto. Сделал оба варианта, сравнил. Вариант с goto оказался гораздо более читабелен, понятен и скорострелен. Разумеется, его я и выбрал. Если бы пришлось использовать язык который не поддерживает goto, то никуда не денешься, пришлось бы оставить кривоту кода. Код без goto был украшен подпорками по самое не хочу, и при внесении изменений кода там был бы кошмар потому что пришлось бы отслеживать не только логику кода, но и логику как выполнить goto без goto.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32964184
k e k s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну яЭто не плохо и ни хорошо, это возможность языка.
Из личного опыта - был случай, когда стоял выбор - реализовать функцию с использованием и без использования goto. Сделал оба варианта, сравнил. Вариант с goto оказался гораздо более читабелен, понятен и скорострелен. Разумеется, его я и выбрал. Если бы пришлось использовать язык который не поддерживает goto, то никуда не денешься, пришлось бы оставить кривоту кода. Код без goto был украшен подпорками по самое не хочу, и при внесении изменений кода там был бы кошмар потому что пришлось бы отслеживать не только логику кода, но и логику как выполнить goto без goto.

полностью согласен с ну_я.
Я смотрю, в большинстве народ, прочитав coding convetions, почему-то запоминают помечание "не следует, там где можно обойтись без.." как "нельзя ни в коем случае". Причем из соглашений по коду они запоминают в основном только это правило и могут при случае развести теорию на целую книгу "Чем опасен гоу-ту и как с ним бороться". А на практике у таких чувачков получается иногда не читаемый код, именно потому- что всеми спосбами стараются соблюсти это неписанное правило забывая про другие.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32964229
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В борьбе за чистоту кода было создано целое направление. "Функциональное программирование". Оно проповедует в частности отказ от оператора присвоения "=". Из языков могу отметить:

- Haskell (Hugs)
- Eiffell
- Caml
- Erlang

У Haskell есть довольно неплохой компиллятор со средой. ( Кому интересно - могу дать ссылки).

Erlang - уже много лет используется фирмой Ericson для управления процессами в сетях мобильной связи. Причем с мощным параллелизмом.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32964344
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ борьбе за чистоту кода было создано целое направление. "Функциональное программирование". Оно проповедует в частности отказ от оператора присвоения "=". Из языков могу отметить:

- Haskell (Hugs)
- Eiffell
- Caml
- Erlang

У Haskell есть довольно неплохой компиллятор со средой. ( Кому интересно - могу дать ссылки).

Erlang - уже много лет используется фирмой Ericson для управления процессами в сетях мобильной связи. Причем с мощным параллелизмом.

Киньте ссылкой
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32964437
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Lelikk

Щас при себе нету. Завтра скину
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32964478
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
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 [j][k])){
iscondition=true;
break;
}
}
if (iscondition) break;
}
if (iscondition) break;
}



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

Код: plaintext
1.
2.
3.
4.
5.
for (int i =  0 ; i <  10  && !iscondition; i ++)
    for (int j =  0 ; j <  10  && !iscondition; j ++)
        for (int k =  0 ; k <  10  && !iscondition; k ++)
            if (condition (a [i][j][k])  iscondition = true;

...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32964566
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan M

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

Код: plaintext
1.
2.
3.
4.
5.
for (int i =  0 ; i <  10  && !iscondition; i ++)
    for (int j =  0 ; j <  10  && !iscondition; j ++)
        for (int k =  0 ; k <  10  && !iscondition; k ++)
            if (condition (a [i][j][k])  iscondition = true;



Вы считаете таким уж хорошим выходом из за одного перехода тормозить циклы столькими баластными условиями? Все-таки goto здесь читается лучше!
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32964590
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что же господа!

Большая половина не имеет ничего против гоуту. Он есть и никто не заставляет его пихать в код.

Да здравствует ГоуТу. Очень важный и полезный инструмент. Его нужно применять с головой и тогда все будет ок. Мне непонятны потуги противников этого оператора. Что пытаетесь доказать то? Единственный момент плох , когда очень часто на одном участке используется помногу Goto , а в других моментах не надо лисапеды изобретать.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32964595
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

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


ну я попытался объяснить, но хотя с одной стороны из меня учитель не лучший, но с другой стороны, некоторых легче пристрелить, чем научить. К счтастью, программисты нужны всякие.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32964656
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Безусловный переход - великолепное, мощьное, красивое средство.
В языках типа бейсика

Дело в том, что программист, разбираясь в вашем коде не сделает безусловный переход так-же хорошо, как откомпиленная прога
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32964710
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelikk[quot mayton
- Haskell (Hugs)
- Eiffell
- Caml
- Erlang

У Haskell есть довольно неплохой компиллятор со средой. ( Кому интересно - могу дать ссылки).

Erlang - уже много лет используется фирмой Ericson для управления процессами в сетях мобильной связи. Причем с мощным параллелизмом.

Киньте ссылкой[/quot]

К функциональным языкам примыкают языки спецификаций
вот можно глянуть
http://www.cs.concordia.ca/~alagar/
ссылка на RSL Group
http://www.iist.unu.edu/raise/

RSL на русском

http://www.ergeal.ru/txt/archive/cs/rsl/index.htm
http://www.ispras.ru/~RedVerst/RedVerst/Lectures%20and%20training%20courses/MSU%20course%20Formal%20specification%20of%20software/RMain.html

пролог типа тоже без гоуто
)))))))))))))))))))))))))))))))))))))
http://www.softcraft.ru/paradigm/dp/dp06-05.shtml
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32965001
Siebentearbeith
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дайте и мне шашкой помахать :)

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

Согласен.
Заметьте, "тем медленне он".

Вопрос надо ставить так: чего хотите? Скорости или читабельности?
Если о скорости нет речи - лучше без гото во вложенных циклах.

Если нужна скорость. Гото, статические переменные в локальных областях видимости, прямые джампы на приращённые на загрузку из стека указатели функций, вообще отказ от функций из-за загрузки стека - код ваш будет ужастным по виду, зато всё будет летать и никто вас не догонит :)

И ещё.То, что не отвалилось в процессе эволюции - нужно.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32965068
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VidmakCase JibSkeartпомню , раньше тоже юзал goto на паскале немножко ,
потом приходилось пользоваться на ассемблере , ну там уже никуда без него .

Ну я бы не согласился с мнением "никуда без него".
О! Вот помню где надо - это загрузочный сектор дискеты... Там первая JMP стоит, которая перепрыгиват через данные о дискетке на код

Ну да , просто я не так выразился ,
я хотел сказать , что чаше всего я наверное им там пользовался .
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32965194
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinБезусловный переход - великолепное, мощьное, красивое средство.
В языках типа бейсика

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

Видимо это плохой программист
Мне например все равно, написан код с goto или без.
И раз он все еще существует, занчит он нужен!
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32965806
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если у тебя строчек так тысяч пять - шесть?

goto, ИМХО, используется потому, что это фактически asm без никто :)
Ну типа JMP
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32965819
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я goto никогда не использовал. Не потому, что я его не люблю. Просто необходимости небыло.

Кстати, интересно, а кокой код быстрее будет:
Код: plaintext
1.
2.
3.
4.
while TRUE do
begin
// сдесь код
end;
или
Код: plaintext
1.
2.
3.
{забыл как метка на паскале зовётся :)))} lbl;
// здесь код
goto lbl;
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32965826
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Lelikk

Обещал ссылки... Вот.

Haskell

http://haskell.org - сайт разработчиков
http://haskell.readscheme.org/
http://www.cs.nott.ac.uk - много статей по ФП
http://www.absoluteastronomy.com/encyclopedia/H/Ha/Haskell_programming_language.htm
http://www.willamette.edu/~fruehr/haskell/evolution.html



Собственно среда с языком у меня есть (hugs98-Nov2003-2.msi) но к сожалению
не могу найти, откуда я ее качал. Но если у вас достаточно толстый почтовый
канал - то могу отправить по мылу (8Mb).

Caml

http://merjis.com/developers/ocaml_tutorial



F#

http://research.microsoft.com/projects/ilx/fsharp.aspx - Функциональный язык с компиллером под платформу .Net
http://blogs.msdn.com/dsyme/archive/2005/03/07/388489.aspx



P.S. Ищу транслятор Eiffel. Пока не смог нигде выкачать для Windows.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32965846
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan M
Вот я с самого начала написал, что если стараться обходиться без goto, то структура программы будет лучше укладываться в голове, что способствует повышению мастерства программирования. Вышеприведённый пример без goto можно было бы написать так:

Код: plaintext
1.
2.
3.
4.
for (int i =  0 ; i <  10  && !iscondition; i ++)
    for (int j =  0 ; j <  10  && !iscondition; j ++)
        for (int k =  0 ; k <  10  && !iscondition; k ++)
            if (condition (a [i][j][k])  iscondition = true;



Хм.. ну я говорил в одном из своих постов что перенос проверки условия в выражение for ничего не меняет. По прежнему, условие выхода из цикла "распылено" по всему исходнику. И сопровождать такой код - геморрой.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32965879
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
P.S. Ищу транслятор Eiffel. Пока не смог нигде выкачать для Windows.
А тут его нету?
...
Рейтинг: 0 / 0
25 сообщений из 109, страница 2 из 5
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Чем плох безусловный переход??
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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