Вход на сайт
Оператор goto в языках программирования.
NEW 31.01.12 13:48
То есть, если пытаешься не использовать этот оператор и с помощью кучи флагов выйти из вложенных циклов, то программа работает столько же времени, что и с goto?
Но если с помощью goto изначально наделано меньше говнокода, чем без него, разве это не облегчает рефакторинг?
в ответ Murr 31.01.12 00:19
В ответ на:
увеличивает перформэнс,
-----
Нет
увеличивает перформэнс,
-----
Нет
То есть, если пытаешься не использовать этот оператор и с помощью кучи флагов выйти из вложенных циклов, то программа работает столько же времени, что и с goto?
В ответ на:
облегчает рефакторинг
-----
Нет
облегчает рефакторинг
-----
Нет
Но если с помощью goto изначально наделано меньше говнокода, чем без него, разве это не облегчает рефакторинг?
NEW 31.01.12 14:05
Не буду.
Во первых изменить кусок кода с "гото" практически невозможно - нужно сразу писать по другому. Мне сложно представить 100 вложеных циклов, я бы организовал отдельные процедуры и в любом бы случае все в одну процедуру бы не пихал.
Во-вторых это философия. Ява позволяет выпасть наружу из любого уровня вложения, но я так не пишу.
Здесь не понял. Вы на чем пишете? Я работаю с высокоуровневыми переменными, меняя их значения.
Здесь я имел в виду, что операторы перехода просты в использовании, но неудобны для разбора чужой программы.
в ответ Murr 31.01.12 13:13
В ответ на:
Ну и нарисуй примерчик. Скажем, 10 (30?.. 100!?.) вложенных циклов, циклы - сложные, с пред и с пост логикой, во внутреннем - нашлось условие незамедлительного прекращения всех действий во всех циклах... Вперед...
Ну и нарисуй примерчик. Скажем, 10 (30?.. 100!?.) вложенных циклов, циклы - сложные, с пред и с пост логикой, во внутреннем - нашлось условие незамедлительного прекращения всех действий во всех циклах... Вперед...
Не буду.

Во-вторых это философия. Ява позволяет выпасть наружу из любого уровня вложения, но я так не пишу.
В ответ на:
Т.е. другими словами мне надо скорректировать стек на все размещенные в нем переменные и продолжить с указанного места. Переход напишу Я, а коррекцию посчитает компилятор.
Т.е. другими словами мне надо скорректировать стек на все размещенные в нем переменные и продолжить с указанного места. Переход напишу Я, а коррекцию посчитает компилятор.
Здесь не понял. Вы на чем пишете? Я работаю с высокоуровневыми переменными, меняя их значения.
В ответ на:
Операторы перехода удобны для себя любимого, когда код абсолютно известен и не надо ничего раскапывать.
Увы, не понял сентенции
Операторы перехода удобны для себя любимого, когда код абсолютно известен и не надо ничего раскапывать.
Увы, не понял сентенции
Здесь я имел в виду, что операторы перехода просты в использовании, но неудобны для разбора чужой программы.
NEW 31.01.12 14:09
Но если с помощью goto изначально наделано больше говнокода, чем без него, разве это не усложняет рефакторинг?
Интересная точка зрения, основанная на определении "говнокод".
В моих языках goto нет, попробовать не могу. Почему бы вам не проверить это и не написать результат? Я думаю, что разница будет несущественна.
в ответ swar0g 31.01.12 13:48
В ответ на:
Но если с помощью goto изначально наделано меньше говнокода, чем без него, разве это не облегчает рефакторинг?
Но если с помощью goto изначально наделано меньше говнокода, чем без него, разве это не облегчает рефакторинг?
Но если с помощью goto изначально наделано больше говнокода, чем без него, разве это не усложняет рефакторинг?

В ответ на:
То есть, если пытаешься не использовать этот оператор и с помощью кучи флагов выйти из вложенных циклов, то программа работает столько же времени, что и с goto?
То есть, если пытаешься не использовать этот оператор и с помощью кучи флагов выйти из вложенных циклов, то программа работает столько же времени, что и с goto?
В моих языках goto нет, попробовать не могу. Почему бы вам не проверить это и не написать результат? Я думаю, что разница будет несущественна.
NEW 31.01.12 14:31
будете ли вы настаивать на своём, если я вам приведу пример более лучшей читаемости чужой программы именно с оператором безусловного перехода?
в ответ except 31.01.12 14:05
В ответ на:
Здесь я имел в виду, что операторы перехода просты в использовании, но неудобны для разбора чужой программы.
Здесь я имел в виду, что операторы перехода просты в использовании, но неудобны для разбора чужой программы.
будете ли вы настаивать на своём, если я вам приведу пример более лучшей читаемости чужой программы именно с оператором безусловного перехода?
NEW 31.01.12 15:03
в ответ swar0g 31.01.12 13:48
То есть, если пытаешься
-----
Перформансе имеет смысл при сравнении равных алгоритмов.
При неравных - т.е при использовании GOTO - он бессмыслен.
разве это не облегчает рефакторинг?
-----
Опять - Нет.
Получается ручной анализ вместо автоматизированного.
-----
Перформансе имеет смысл при сравнении равных алгоритмов.
При неравных - т.е при использовании GOTO - он бессмыслен.
разве это не облегчает рефакторинг?
-----
Опять - Нет.
Получается ручной анализ вместо автоматизированного.
31.01.12 15:12
Чушь. Алгоритм может быть одним и тем же, но по-разному реализован.
А разве автоматизированый анализ нельзя настроить на оператор перехода? Или религиозная парадигма не позволяет?
в ответ Murr 31.01.12 15:03
В ответ на:
Перформансе имеет смысл при сравнении равных алгоритмов.
При неравных - т.е при использовании GOTO - он бессмыслен.
Перформансе имеет смысл при сравнении равных алгоритмов.
При неравных - т.е при использовании GOTO - он бессмыслен.
Чушь. Алгоритм может быть одним и тем же, но по-разному реализован.
В ответ на:
Получается ручной анализ вместо автоматизированного.
Получается ручной анализ вместо автоматизированного.
А разве автоматизированый анализ нельзя настроить на оператор перехода? Или религиозная парадигма не позволяет?
NEW 31.01.12 15:21
в ответ except 31.01.12 14:05
изменить кусок кода с "гото" практически невозможно
-----
??? - всегда есть возможность написать без него. Но иногда проще именно с ним.
и в любом бы случае все в одну процедуру бы не пихал
-----
А давай попробуем?
Дано - граф. Вершины - понятно. Дуги, или переходные функции - закрытое ДСП.
Есть гений-специалист в своей области, знающий как надо считать то, что надо
считать в частных случаях. Этот же спец ничего не понимает в программинге и
совершенно не заинтересован в раскрытии своей методики.
По тому, что надо делать, если делать в лоб, получается матрица, большего, чем
можно обработать на имеющейся технике, размера, да еще с инфинитным итератором.
Гений - знает когда можно срезать инфинитность и заменить ее чем-то относительно
простым - уровень отсечения - те самые 100 циклов, зависящих от данных в переходных
функциях т.е. не укладывающиеся с стандартные решения...
Ответ на вопрос - Почему так? - у гения, в закрытом ДСП...
Вы на чем пишете?
------
На всем, что способно описать алгоритм.
но неудобны для разбора чужой программы.
-----
Сие не есть правда.
-----
??? - всегда есть возможность написать без него. Но иногда проще именно с ним.
и в любом бы случае все в одну процедуру бы не пихал
-----
А давай попробуем?
Дано - граф. Вершины - понятно. Дуги, или переходные функции - закрытое ДСП.
Есть гений-специалист в своей области, знающий как надо считать то, что надо
считать в частных случаях. Этот же спец ничего не понимает в программинге и
совершенно не заинтересован в раскрытии своей методики.
По тому, что надо делать, если делать в лоб, получается матрица, большего, чем
можно обработать на имеющейся технике, размера, да еще с инфинитным итератором.
Гений - знает когда можно срезать инфинитность и заменить ее чем-то относительно
простым - уровень отсечения - те самые 100 циклов, зависящих от данных в переходных
функциях т.е. не укладывающиеся с стандартные решения...
Ответ на вопрос - Почему так? - у гения, в закрытом ДСП...
Вы на чем пишете?
------
На всем, что способно описать алгоритм.
но неудобны для разбора чужой программы.
-----
Сие не есть правда.
NEW 31.01.12 15:30
в ответ swar0g 31.01.12 15:12
Алгоритм может быть одним и тем же
-----
Угу... и граф переходов будет одним и тем же...
А разве автоматизированый анализ нельзя настроить на оператор перехода?
-----
Распознавание - можно. Чего-то большего мне пока не встречалось. Оно и
понятно - безусловный переход выпадает схемы, требующей приведения
системы к виду - один вход = один выход...
Или религиозная парадигма не позволяет?
-----
Она самая...
-----
Угу... и граф переходов будет одним и тем же...

А разве автоматизированый анализ нельзя настроить на оператор перехода?
-----
Распознавание - можно. Чего-то большего мне пока не встречалось. Оно и
понятно - безусловный переход выпадает схемы, требующей приведения
системы к виду - один вход = один выход...
Или религиозная парадигма не позволяет?
-----
Она самая...
NEW 31.01.12 18:53
Исключения - это вариант возврата (return). Т.е. есть два способа откинуться: по честному (от звонка до звонка), и по исключению (досрочно-условно-по-амнистии). Раньше это моделировали вручную. Потом паттерн реализовали на синтаксическом уровне.
К goto исключения не имеют отношения. Разве что отдаленно в плане споров о степени их вредоносности. Исключения вполне структурны и усложняют логику программы только из-за введения дополнительных путей наверх. А goto использует свою систему координат (лейблы), которая никак не связана и может противоречить структурным координатам (названия процедур, циклы и т.п.)
в ответ Simple 31.01.12 12:51
В ответ на:
http://eli.thegreenplace.net/2009/04/27/using-goto-for-error-handling-in-c/
Исключения - это современный goto. Их же не выбросили? ;)
http://eli.thegreenplace.net/2009/04/27/using-goto-for-error-handling-in-c/
Исключения - это современный goto. Их же не выбросили? ;)
Исключения - это вариант возврата (return). Т.е. есть два способа откинуться: по честному (от звонка до звонка), и по исключению (досрочно-условно-по-амнистии). Раньше это моделировали вручную. Потом паттерн реализовали на синтаксическом уровне.
К goto исключения не имеют отношения. Разве что отдаленно в плане споров о степени их вредоносности. Исключения вполне структурны и усложняют логику программы только из-за введения дополнительных путей наверх. А goto использует свою систему координат (лейблы), которая никак не связана и может противоречить структурным координатам (названия процедур, циклы и т.п.)
NEW 31.01.12 21:45
Нифига. Return - это возврат к месту входа в подпрограмму. Исключение - это по сути longjmp.
Имеют. См. выше.
Исключения упрощают логику программы.
в ответ svnv 31.01.12 18:53
В ответ на:
Исключения - это вариант возврата (return)
Исключения - это вариант возврата (return)
Нифига. Return - это возврат к месту входа в подпрограмму. Исключение - это по сути longjmp.
В ответ на:
К goto исключения не имеют отношения.
К goto исключения не имеют отношения.
Имеют. См. выше.
В ответ на:
Исключения [...] усложняют логику программы только из-за введения дополнительных путей наверх.
Исключения [...] усложняют логику программы только из-за введения дополнительных путей наверх.
Исключения упрощают логику программы.
NEW 01.02.12 08:08
Ну конечно же нет
А не боитесь, что во время дисскусии без разбора пример сразу будет назван говнокодом? Холивар все таки
в ответ swar0g 31.01.12 14:31
В ответ на:
будете ли вы настаивать на своём, если я вам приведу пример более лучшей читаемости чужой программы именно с оператором безусловного перехода?
будете ли вы настаивать на своём, если я вам приведу пример более лучшей читаемости чужой программы именно с оператором безусловного перехода?
Ну конечно же нет


NEW 01.02.12 08:17
Clean Code считает, что исключения упрощают логику программы. Исключения ни в коем случе не возврат, а прыжок к ближайшему обработчику исключений, часто на много уровней выше. При правильном использовании это обработка исключительной ситуации - бросаем все, освобождаем ресурсы и бежим к запасному выходу, где при необходимости завем на помощь.
Логику это упрощает, потому что ситуации, обрабатываемые исключением, к логике отношения не имеют - это спасательная капсула, использование которой в плане работ не прописывается. А если все в порядке - смотрим план работ.
в ответ svnv 31.01.12 18:53
В ответ на:
Исключения вполне структурны и усложняют логику программы
Исключения вполне структурны и усложняют логику программы
Clean Code считает, что исключения упрощают логику программы. Исключения ни в коем случе не возврат, а прыжок к ближайшему обработчику исключений, часто на много уровней выше. При правильном использовании это обработка исключительной ситуации - бросаем все, освобождаем ресурсы и бежим к запасному выходу, где при необходимости завем на помощь.
Логику это упрощает, потому что ситуации, обрабатываемые исключением, к логике отношения не имеют - это спасательная капсула, использование которой в плане работ не прописывается. А если все в порядке - смотрим план работ.
NEW 01.02.12 08:23
Давайте. Есть очень специфическая задача с кучей странных условий типа гения, алгоритм которой мне неизвестен. Разумеется в любой системе есть исключения и всегда можно придумать задачу под решение. Почему бы не сделать проще - сказать что шеф тащится от goto и за его использование накидывает премии
И вот уже второй повод использовать goto.
в ответ Murr 31.01.12 15:21
В ответ на:
А давай попробуем?
Дано - граф. Вершины - понятно. Дуги, или переходные функции - закрытое ДСП.
Есть гений-специалист в своей области, знающий как надо считать то, что надо
считать в частных случаях. Этот же спец ничего не понимает в программинге и
совершенно не заинтересован в раскрытии своей методики.
По тому, что надо делать, если делать в лоб, получается матрица, большего, чем
можно обработать на имеющейся технике, размера, да еще с инфинитным итератором.
Гений - знает когда можно срезать инфинитность и заменить ее чем-то относительно
простым - уровень отсечения - те самые 100 циклов, зависящих от данных в переходных
функциях т.е. не укладывающиеся с стандартные решения...
Ответ на вопрос - Почему так? - у гения, в закрытом ДСП...
А давай попробуем?
Дано - граф. Вершины - понятно. Дуги, или переходные функции - закрытое ДСП.
Есть гений-специалист в своей области, знающий как надо считать то, что надо
считать в частных случаях. Этот же спец ничего не понимает в программинге и
совершенно не заинтересован в раскрытии своей методики.
По тому, что надо делать, если делать в лоб, получается матрица, большего, чем
можно обработать на имеющейся технике, размера, да еще с инфинитным итератором.
Гений - знает когда можно срезать инфинитность и заменить ее чем-то относительно
простым - уровень отсечения - те самые 100 циклов, зависящих от данных в переходных
функциях т.е. не укладывающиеся с стандартные решения...
Ответ на вопрос - Почему так? - у гения, в закрытом ДСП...
Давайте. Есть очень специфическая задача с кучей странных условий типа гения, алгоритм которой мне неизвестен. Разумеется в любой системе есть исключения и всегда можно придумать задачу под решение. Почему бы не сделать проще - сказать что шеф тащится от goto и за его использование накидывает премии

NEW 01.02.12 10:15
Дело в том, что "прыжок к ближайшему обработчику исключений" как раз и следует пути возврата, т.е. мы идем обратно вдоль пути вызова процедур. Так что исключение это есть самый обычный возврат, плюс определенная логика его обработки, реализованная в языке (try-catch). То, что может происходить возрат "на много уровней выше" не меняет ситуацию, поскольку все эти уровни лежат на самом обычном пути возврата.
А при обычном возврате мы разве не бросаем все и не бежим к выходу? Так что исключения лучше называть "особенный возврат" или "специальный возврат", т.е. возврат, который можно обработать отдельно в точке возврата.
Вообще, часто нет принципиальной разницы как возвращаться: по обычному или по исключению, это вопрос хорошего дизайна. Простейший пример. Пишешь ты метод поиска чего-либо. Если ничего не найдено, то это обычный возврат или исключение? Однозначного ответа нет - делай как хочешь. В большинстве случаев проще с помощью обычного возврата, но некоторые озабоченные любят втыкать исключения куда не попадя (типа это круто), в результате вся программа это сплошные try-catch.
Так что исключения конечно бывает весьма полезны, но когда видишь, что люди с ней творят, то часто хочется, чтобы ее запретили.
в ответ except 01.02.12 08:17
В ответ на:
Исключения ни в коем случе не возврат, а прыжок к ближайшему обработчику исключений, часто на много уровней выше.
Исключения ни в коем случе не возврат, а прыжок к ближайшему обработчику исключений, часто на много уровней выше.
Дело в том, что "прыжок к ближайшему обработчику исключений" как раз и следует пути возврата, т.е. мы идем обратно вдоль пути вызова процедур. Так что исключение это есть самый обычный возврат, плюс определенная логика его обработки, реализованная в языке (try-catch). То, что может происходить возрат "на много уровней выше" не меняет ситуацию, поскольку все эти уровни лежат на самом обычном пути возврата.
В ответ на:
При правильном использовании это обработка исключительной ситуации - бросаем все, освобождаем ресурсы и бежим к запасному выходу, где при необходимости завем на помощь.
При правильном использовании это обработка исключительной ситуации - бросаем все, освобождаем ресурсы и бежим к запасному выходу, где при необходимости завем на помощь.
А при обычном возврате мы разве не бросаем все и не бежим к выходу? Так что исключения лучше называть "особенный возврат" или "специальный возврат", т.е. возврат, который можно обработать отдельно в точке возврата.
Вообще, часто нет принципиальной разницы как возвращаться: по обычному или по исключению, это вопрос хорошего дизайна. Простейший пример. Пишешь ты метод поиска чего-либо. Если ничего не найдено, то это обычный возврат или исключение? Однозначного ответа нет - делай как хочешь. В большинстве случаев проще с помощью обычного возврата, но некоторые озабоченные любят втыкать исключения куда не попадя (типа это круто), в результате вся программа это сплошные try-catch.
Так что исключения конечно бывает весьма полезны, но когда видишь, что люди с ней творят, то часто хочется, чтобы ее запретили.
NEW 01.02.12 14:46
Да, по стеку мы возвращаемся обратно. Но в пределах рутины нас выбрасывает куда-то.
Запускаем рутину. Из нее запускаем следующую и еще одну. Где то там в начале 5-го уровня обваливаемся. Нас выкинет на тот уровень, на котором естъ обработка исключения и в то место рутины, где эта обработка помещена. То есть обвалились мы на 5-м уровне в начале рутины, а выкинуло нас на 3-й, куда-то в середину.
В обычном варианте мы выходим через ту дверь, через которую вошли. Зашли в рутину - вышли на следующей строчке.
Есть. Все время вылазить по пожарной лестнице возможно, но как то не принято.
Если это обычный поиск - то результат. Если этот поиск жизненно важен для последующей логики и искомый обьект в принципе должен существовать (то есть его отсутствие нарушает логику программы) - тогда исключение. Это позволит не таскать результат из уровня на уровень, когда в программе делать больше нечего - она не может дальше нормально функционировать.
P.S. На истину в последней инстанции не претендую
в ответ svnv 01.02.12 10:15
В ответ на:
Дело в том, что "прыжок к ближайшему обработчику исключений" как раз и следует пути возврата
Дело в том, что "прыжок к ближайшему обработчику исключений" как раз и следует пути возврата
Да, по стеку мы возвращаемся обратно. Но в пределах рутины нас выбрасывает куда-то.
Запускаем рутину. Из нее запускаем следующую и еще одну. Где то там в начале 5-го уровня обваливаемся. Нас выкинет на тот уровень, на котором естъ обработка исключения и в то место рутины, где эта обработка помещена. То есть обвалились мы на 5-м уровне в начале рутины, а выкинуло нас на 3-й, куда-то в середину.
В обычном варианте мы выходим через ту дверь, через которую вошли. Зашли в рутину - вышли на следующей строчке.
В ответ на:
Вообще, часто нет принципиальной разницы как возвращаться
Вообще, часто нет принципиальной разницы как возвращаться
Есть. Все время вылазить по пожарной лестнице возможно, но как то не принято.
В ответ на:
Если ничего не найдено, то это обычный возврат или исключение? Однозначного ответа нет - делай как хочешь
Если ничего не найдено, то это обычный возврат или исключение? Однозначного ответа нет - делай как хочешь
Если это обычный поиск - то результат. Если этот поиск жизненно важен для последующей логики и искомый обьект в принципе должен существовать (то есть его отсутствие нарушает логику программы) - тогда исключение. Это позволит не таскать результат из уровня на уровень, когда в программе делать больше нечего - она не может дальше нормально функционировать.
P.S. На истину в последней инстанции не претендую

NEW 01.02.12 17:03
Ну кто назовёт говнокодом, пусть соизволит сказать как оно должно быть лучше, иначе он врун и мелкий засранец.
Нужно учитывать, что код пишет куча разных людей.
В теле функции могут в любой момент что-нибудь дополнить/убрать.
ссылка
Функция init_dev()
Особенно предлагаю задуматься, почему в функции всего лишь один return
в ответ except 01.02.12 08:08
В ответ на:
Ну конечно же нет А не боитесь, что во время дисскусии без разбора пример сразу будет назван говнокодом? Холивар все таки
Ну конечно же нет А не боитесь, что во время дисскусии без разбора пример сразу будет назван говнокодом? Холивар все таки
Ну кто назовёт говнокодом, пусть соизволит сказать как оно должно быть лучше, иначе он врун и мелкий засранец.
Нужно учитывать, что код пишет куча разных людей.
В теле функции могут в любой момент что-нибудь дополнить/убрать.
ссылка
Функция init_dev()
Особенно предлагаю задуматься, почему в функции всего лишь один return