Неплохая попытка,GOTO

Неплохая попытка,GOTO IT, IT юмор, Комиксы, Программирование

IT-юмор

5.6K поста52.5K подписчиков

Добавить пост

Правила сообщества

Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору

Вы смотрите срез комментариев. Показать все
28
Автор поста оценил этот комментарий
goto или не goto?

В 1968 году, в своей статье «Обоснование пагубности оператора goto», Эдсгер Дейкстра отметил, что качество кода обратно пропорционально количеству goto, используемых в коде. Дейкстра утверждал (это просто его мнение), что:
§ корректность кода без goto доказать легче
§ код с операторами goto трудно форматировать
§ goto влияет на логическую структуру программы
§ применение goto препятствует оптимизации, выполняемой компилятором
§ goto усложняет анализ кода
· На практике применение оператора goto, приводит к нарушению принципа хода алгоритма строго сверху вниз.
· Сторонники goto выступают за осторожное применение оператора, при определенных условиях.
· Большинство аргументов против goto, не говорит о полном отказе от этого оператора, а предостерегает от неразборчивого его использования.
· Хорошее программирование не означает исключение всех goto.
· Стремление к коду без goto не должно быть целью.
· Десятилетия исследований оператора goto не смогли подтвердить его вредоносность, а теоретические и экспериментальные доводы, выдвигаемые против этого оператора, оказались не убедительными.
· И наконец, операторы goto входят во множество современных языков.
· Microsoft чаще использует goto при автогенерации кода, когда этот код не предназначен для восприятия и редактирования человеком. Корректность такого кода определяется корректностью создающего его инструмента.
· Использование goto – это вопрос религии
раскрыть ветку (51)
10
Автор поста оценил этот комментарий

Как неоднократно говорилось: "Дай дураку стеклянный хуй - он и его разобьёт и руки порежет".

Точно таким же макаром можно указатели и адресные операции запретить (что, собственно, эти ваши пехапе и прочие питоны с успехом и делают), чтобы "не дай бог не туда move сделал".


GoTo - обычный инструмент. Один из.

З.Ы. Да, иногда использую, в cmd-скриптах. И в хранимках TSQL, тоже он в тему иногда.

раскрыть ветку (4)
1
Автор поста оценил этот комментарий

а зачем нужны в PHP адресные операции? есть &var и этого вполне достаточно... считай тот-же указатель, но без манипулирования адресами и смещениями типа *p++

раскрыть ветку (3)
Автор поста оценил этот комментарий
В пхп - действительно не нужны, не тот род задач.
раскрыть ветку (2)
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
Автор поста оценил этот комментарий

От задач зависит. У меня бывает, всякая адресная муйня, коллбэки в библиотеки и т.п.

11
Автор поста оценил этот комментарий

Ох уж эти ваши суеверия i++, ++i

раскрыть ветку (15)
18
Автор поста оценил этот комментарий

ну так i++ и ++i это немного разные операции. при чём тут суеверия?

ещё комментарии
4
Автор поста оценил этот комментарий

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

раскрыть ветку (28)
3
Автор поста оценил этот комментарий

Мсье плохой политик. Надо втихаря добавить goto, а потом под предлогом наличия goto выпиливать весь файл / модуль

раскрыть ветку (1)
Автор поста оценил этот комментарий

а потом быть уволенным, когда будут смотреть кто коммитил этот код

5
Автор поста оценил этот комментарий
Выход из нескольких вложенных циклов, когда в языке нет возможности break с указанием цикла для выхода
раскрыть ветку (19)
4
Автор поста оценил этот комментарий

хм. в javascript бы пригодилось с его убогим forEach

3
Автор поста оценил этот комментарий

Такой кусок говнокода на рефакторинг напрашивается, с вынесением в отдельные функции/методы.

раскрыть ветку (17)
5
Автор поста оценил этот комментарий

Ну, есть у тебя двухмерный массив, и тебе его надо по строкам обрабатывать. При этом при определённом условии при обработке столбца надо выходить из обоих циклов. Как ты это нормально отрефакторишь, если не учитываем использование флага, который проверяет внешний цикл (т.к. это по сути костыль из-за отсутствия возможности)? Вынесение обоих циклов в отдельную функцию рассматривать не будем, т.к. во внутреннем цикле кроме проверки примитивная логика и особого профита от вынесения не получится

раскрыть ветку (7)
2
Автор поста оценил этот комментарий

Если надо по строкам обрабатывать, то вынесу обработку строки в отдельную функцию, выход по return. Такой вариант позволит легко распараллелить обработку по принципу map/reduce, например.

раскрыть ветку (6)
Автор поста оценил этот комментарий

Ну и трать время на постоянный вызов функции.

раскрыть ветку (1)
3
Автор поста оценил этот комментарий
Ну и пиши на асме, если каждый такт на счету.
Автор поста оценил этот комментарий

Не совсем. Вынеся обработку строки в отдельную функцию, ты проблему не решишь, т.к. по return выйдешь только из цикла, который обрабатывает одну строку, что решается и break'ом. А тут суть в том, чтобы из обработчика строки завершить цикл, который по строкам идёт

раскрыть ветку (3)
Автор поста оценил этот комментарий
Из основного цикла можно брякнуться в зависимости от того, что функция вернула.
раскрыть ветку (2)
Автор поста оценил этот комментарий

Ага, вот мы и вернулись к дополнительному флагу

раскрыть ветку (1)
Автор поста оценил этот комментарий

Ну кинь исключение, если язык и религия позволяет.

1
Автор поста оценил этот комментарий
Каждый вызов метода - это дополнительный сейв-лоад состояния ппоцессора, если я не путаю
раскрыть ветку (8)
1
Автор поста оценил этот комментарий

Путаешь. Всего лишь сдвиг стека.

раскрыть ветку (3)
Автор поста оценил этот комментарий

Стек не бесконечен, такая вот хуйня.

раскрыть ветку (2)
Автор поста оценил этот комментарий

И что? На жизнь хватает обычно.

Автор поста оценил этот комментарий
Но при выходе стек вернут взад, так что нефиг. А fastcall'у и стек не нужен.
3
Автор поста оценил этот комментарий
Экономия на спичках. Настолько заморачиваться имеет смысл разве что если прога предназначена для ENIACа.
раскрыть ветку (3)
2
Автор поста оценил этот комментарий

А потом получается что производительность железа растет, а тормоза в по никуда не деваются.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Спасибо обмазыванию фреймворками и js для решения всех задач.
2
Автор поста оценил этот комментарий

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

Автор поста оценил этот комментарий

cmd-shell. Большой скрипт с мало-мальским наличием логических ветвлений без goto не напишешь.

И не надо про PowerShell рассказывать, 20 лет назад его не было. И альтернативы cmd - тоже.

раскрыть ветку (5)
Автор поста оценил этот комментарий

20 лет назад его не было. И альтернативы cmd - тоже.

Perl появился в 1987 году, если что. И по удивительному совпадению, с 1997 года появилась версия для Windows.

раскрыть ветку (4)
Автор поста оценил этот комментарий
И стал встроенным в винду в том же 97 году?
Проблема ведь не в самом скриптовом языке как таковом, их овер9000 есть. Проблема их на голой винде развернуть.
Условно говоря, твоя система должна уметь полностью разворачиваться путём запуска одного файла.
раскрыть ветку (3)
Автор поста оценил этот комментарий

Собственный инсталлер винды можно было со времён OSR2 запилить, и уж загнать туда интерпретатор вообще не проблема. Или скопировать с носителя, с которого на голую винду батник попадает. Вариантов много, отмазок ещё больше.

раскрыть ветку (2)
Автор поста оценил этот комментарий
С дуру и хуй сломать можно. Не понимаю, почему бы не использовать тот инструмент, который железно имеется, даже на NT4 без патчей.
Тем более, что задач применения там дофига было. Те же бэкапы системы по расписанию, с последующим копированием-архивированием-прожигом.
Только потому, что в нем наличие goto суровая необходимость?
раскрыть ветку (1)
Автор поста оценил этот комментарий
Да пользуйтесь чем вам удобнее, ваше право. Я лишь подметил, что и 20 лет тому назад была альтернатива батникам.
Автор поста оценил этот комментарий

в switch/case внутри тот-же goto будет...

* и вообще это уже и не актуально )

** goto просто делает код запутанным, поэтому и считался нежелательным оператором ранее.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку