реклама на сайте
подробности

 
 
6 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Оператор GoTo, безусловный переход или правила хорошего тона
_artem_
сообщение Sep 29 2006, 22:40
Сообщение #16


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Сколько людей столько и мнений. Если не злоупотреблять, то goto иногда более удобный вариант чем циклы и свитчи с continue и break'ами (imho).

Есть еще другая истина в последней инстанции - файл должен помешаться на одну страницу текста - то есть полностью отображаться на экране дисплея . Так нет у некоторых на файл приходится по сотне килобайтов. Kрайности.

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

Скажу так - каждый прав по своему)


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
J_B
сообщение Sep 30 2006, 04:24
Сообщение #17


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 17-01-06
Пользователь №: 13 275



Спасибо высказавшимся, просто написал переход от двоичной в двоично-десятичную (для семисегментников), и вспомнил про гоуту...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 30 2006, 06:10
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(_artem_ @ Sep 30 2006, 01:40) *
Была какая то статья, с которой весь этот садомазоэстетический спор в мире програмистов начался, не помню только ее название.

Началась это на моей памяти Виртом с обоснования теоретической базы "Паскаля" как попытки создать язык идеальный для толкования компилятором ну априори предполагаемый "удобным" для пользователя ввиду его однозначности. Для компилятора, спору нет, goto в большинстве случаев - проблема, ибо начисто ломает его все стандартные "домашние заготовки". Соответственно простые компиляторы давних времен генерили весьма поганый код. Компиляторы поумнели и стали нормально понимать удобные человеку конструкции, идеалисты от компиляции продолжают движение и дошли до "Оберона".
На сегодняшний день причин не использовать в "C" goto в удобном месте нет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Petka
сообщение Sep 30 2006, 09:43
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(zltigo @ Sep 30 2006, 10:10) *
На сегодняшний день причин не использовать в "C" goto в удобном месте нет.


Хм.... Причина есть! И на сегодняшний день она ещё более актуальна! Дело в том, что сейчас серьёзный проект можно написать только работая в команде разработчиков. И для того, что бы в твоём коде можно было разобраться другому человеку, надо писать по общепринятым "правилам хорошего тона". Одним из правил является форматирование отступами вложенного кода (например тело цикла, условия - так проще найти глазами конец цикла и условия и т.д.). С использованием Goto такое форматирование осуществить в общем случае невозможно, что приводит полному мясу кода, который спустя некоторое время не только сторонний человек понять не сможет, но и даже сам разработчик. А компиляторы тут ни при чём, сейчас они умные. ИМХО любой логичный алгоритм можно изящно записать без Goto. Это как "любую мысль можно передать без мата".
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 30 2006, 10:04
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Petka @ Sep 30 2006, 12:43) *
С использованием Goto такое форматирование осуществить в общем случае невозможно, что приводит полному мясу кода, который спустя некоторое время не только сторонний человек понять не сможет, но и даже сам разработчик.

Если выражаться коротко, то это бред.

Цитата
ИМХО любой логичный алгоритм можно изящно записать без Goto.
Это как "любую мысль можно передать без мата".

Можно все, но не изящно. Ибо понятие изящно применимо к более-менее искуственно замкнутым системам. Там где на систему плотно влияют внешние непреодолимые обстоятельства там и требуются якобы "неизящные" выходы и не самые исключения, которые подтверждают правила. Причем попав в такую ситуацию я предпочитаю четко и ясно выразить свлю мысль, например словом "пи....ц", поятным каждому нормальному человеку а не "изящно" и муторно с жевать сопли для "литературной" передачи
мысли.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
CD_Eater
сообщение Sep 30 2006, 12:20
Сообщение #21


Частый гость
**

Группа: Новичок
Сообщений: 173
Регистрация: 3-09-04
Из: Moscow
Пользователь №: 595



Цитата(zltigo @ Sep 30 2006, 14:04) *
Цитата(Petka @ Sep 30 2006, 12:43) *

С использованием Goto такое форматирование осуществить в общем случае невозможно, что приводит полному мясу кода, который спустя некоторое время не только сторонний человек понять не сможет, но и даже сам разработчик.

Если выражаться коротко, то это бред.
А если не коротко ? Пока не видно Ваших аргументов. Ждём примера кода, который без GOTO хуже, нежели с GOTO.
imho, максимум, что может дать GOTO - это сократить код на 2-3 строки в ущерб читабельности программы.

Цитата(zltigo @ Sep 30 2006, 14:04) *
Цитата

Это как "любую мысль можно передать без мата".

Причем попав в такую ситуацию я предпочитаю четко и ясно выразить свлю мысль, например словом "пи....ц"
Не уподобляйтесь тем, у кого "косноязычие компенсируется скудоумием". Поверьте - русский язык велик и могуч. Хотя в Ваших краях, наверное, с его изучением туговато. smile.gif
Go to the top of the page
 
+Quote Post
goodwin
сообщение Sep 30 2006, 12:41
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 481
Регистрация: 1-08-05
Пользователь №: 7 267



Совсем недавно была дискуссия на телесистемах по поводу возвращения к началу обработки из нескольких вложенных циклов в подпрограмме. Всякие флаги, исключения - вот где настоящий изврат, по сравнеию с goto...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 30 2006, 12:52
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(CD_Eater @ Sep 30 2006, 15:20) *
А если не коротко ?

А не коротко, по поводу отцитированного ничего и не скажешь :-(.
Цитата
Хотя в Ваших краях, наверное, с его изучением туговато.

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

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
J_B
сообщение Sep 30 2006, 14:27
Сообщение #24


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 17-01-06
Пользователь №: 13 275



Особо переделкой без goto не занимался, но кто что скажет:
VAL=0;
X=100;
foR(I=0;I<=2;I++)
{
LABEL:
TMP_P=TMP;
TMP=TMP-X;
if(TMP<0)
{
SEG[i]=VAL;
VAL=0;
TMP=TMP_P;
X=X/10;
}
else
{
VAL=VAL++;
goto LABEL;
}

}

Смысл таков:
есть заранее неизвестное значение (16р) в диапазоне 0-999 - TMP.
Вывод на тройной индикатор SEG0-2. Идея:" Способ преобразования заключается в том, чтобы, вычитая из исходного числа число 100, сначала определить десятичную цифру десятков сотен. Затем находится цифра десятков последовательным вычитанием числа 10 и т. д. Вычитание каждый раз производится до получения отрицательной разности с подсчетом числа вычитаний. При переходе к определению каждого следующего десятичного разряда в регистрах исходного числа восстанавливается последняя положительная разность"
Go to the top of the page
 
+Quote Post
Petka
сообщение Sep 30 2006, 14:40
Сообщение #25


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(zltigo @ Sep 30 2006, 14:04) *
Цитата(Petka @ Sep 30 2006, 12:43) *

С использованием Goto такое форматирование осуществить в общем случае невозможно, что приводит полному мясу кода, который спустя некоторое время не только сторонний человек понять не сможет, но и даже сам разработчик.

Если выражаться коротко, то это бред.

Аргументы?
В электронику я перешёл из "программистов". Могу позволить себе утверждать, что Вы не до конца освоили работу в команде, как и отличие языков высокого уровня от низкого. Недавно в форуме пробегала ссылка на "косметику для программистов". Советую ознакомится.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 30 2006, 14:56
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(J_B @ Sep 30 2006, 17:27) *
Смысл таков:

Если не касаться прочих многочисленных, назовем - странностей, то
просто вообще уберите две строки
label:
и
goto label;
и добавьте цикл с break;

Если зачем-то кто-то пишет такое, то я начинаю понимать Petka :-)


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 30 2006, 15:07
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Petka @ Sep 30 2006, 17:40) *
Аргументы?

Попробуйте преречитать написанное Вами:
Цитата
Одним из правил является форматирование отступами вложенного кода (например тело цикла, условия - так проще найти глазами конец цикла и условия и т.д.). С использованием Goto такое форматирование осуществить в общем случае невозможно....

Я искренне не понимаю какие аргументы от меня требуются :-((((


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
xemul
сообщение Sep 30 2006, 15:45
Сообщение #28



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(J_B @ Sep 30 2006, 18:27) *
Особо переделкой без goto не занимался, но кто что скажет:
Код
VAL=0;
X=100;
for(I=0;I<=2;I++)
{
LABEL:
   TMP_P=TMP;
   TMP=TMP-X;
   if(TMP<0)
   {
      SEG[i]=VAL;
      VAL=0;
      TMP=TMP_P;
      X=X/10;
   }
   else
   {
      VAL=VAL++;
      goto LABEL;
   }
}

Смысл таков:
есть заранее неизвестное значение (16р) в диапазоне 0-999 - TMP.
Вывод на тройной индикатор SEG0-2. Идея:" Способ преобразования заключается в том, чтобы, вычитая из исходного числа число 100, сначала определить десятичную цифру десятков сотен. Затем находится цифра десятков последовательным вычитанием числа 10 и т. д. Вычитание каждый раз производится до получения отрицательной разности с подсчетом числа вычитаний. При переходе к определению каждого следующего десятичного разряда в регистрах исходного числа восстанавливается последняя положительная разность"

Скажу только, что
Код
      goto LABEL;

здесь абсолютно бессмысленен, т.к. точно такой же по смыслу переход уже присутствует в силу организации цикла.
По сути программы: если Вы хотели уйти от деления, Вам это таки не удалось.
Сделайте хотя бы так:
Код
   if(TMP<0)
   {
      SEG[i]=VAL;
      VAL=0;
      TMP=TMP_P;
      if(X==100) X=10;
      else if(X==10) X=1;
      else break;
   }

А еще проще посмотреть сорцы для BCD преобразования.

Бр-р-р. Не посмотрел на уловия цикла. Здесь и goto не поможетsmile.gif.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 30 2006, 15:55
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Код
    seg[0] = tmp/100;
    seg[2] = tmp%10; tmp /= 10;
    seg[1] = tmp%10;


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
xemul
сообщение Sep 30 2006, 16:02
Сообщение #30



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(zltigo @ Sep 30 2006, 19:55) *
Код
    seg[0] = tmp/100;
    seg[2] = tmp%10; tmp /= 10;
    seg[1] = tmp%10;

Ну так не интересноsmile.gif. Без выподвывертов-то biggrin.gif.
Go to the top of the page
 
+Quote Post

6 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01489 секунд с 7
ELECTRONIX ©2004-2016