Имбирная Ведьмочка
> Спросит у опытного. Либо набьёт шишки, станет опытным и тогда определит.
Имбирная Ведьмочка
> Код ревью.
при таком раскладе, получается, что джуну должны шишки набивать те, кто делает этот код ревью.
соответственно, сами сеньёры, чтобы сэкономить себе силы, время и палки для битья, в интернетах пропагандируют "неиспользование гото", а всякие попытки обсуждать: "нет, давайте всё-таки гото использовать" присекают.
Имбирная Ведьмочка
> И что теперь, вообще программирование запретить?
> Даже туалетной бумагой дети овладевают не с первого раза.
ну т.е. всё правильно просиходит?!
в учебных заведениях преподаётся, что гото есть, но использовать его нельзя.
на работе старшие коллеги, гото не используют, и говорят, что код ревью не пройдёт, если попытаешься гото написать.
человек вырастает программируя без гото, и передаёт свой опыт дальше.
Имбирная Ведьмочка
> если ты не будешь следить за работой интернов-джунов — то они просто испоганят вам проект
Это влажные фантазии чиновников от погроммирования ;)
totoro
> Это влажные фантазии чиновников от погроммирования ;)
суровая реальность жизни.
испоганят проект на раз-два.
...до сих пор чищу.
А так есть какие-то случаи, которые goto покрывает, а labeled break/continue - нет?
Dmitry_Milk
очистка ресурсов в сишной программе.
Или ты имеешь в виду что всегда можно do{}while(0) добавить и делать break\continue?
Есть много разных способов как имитировать goto, без goto, но выглядят они уродливее goto, со структурной и смысловой точки зрения, как сраное лицемерие они выглядят (если считать, что goto среди операторов имеется, если то не какой-нибудь python).
skalogryz
> я опасаюсь и того, что порядок вызова функций мне никто не укажет.
И снова капитанство. Если в коде не разобрался, то нужно разобраться прежде чем его править. И лучше стараться так кодить что бы порядок вызова функций был не важен, я этот момент затронул потому что по словам шведского модератора он переписал из-за этого юнити. Но причём тут глобальные переменные и гото?
skalogryz
> и я опасаюсь сайд-эффектов. да
Я прочитал про это на википедии https://ru.wikipedia.org/wiki/Побочный_эффект_(программирование). Это какие то заскоки с++ программистов?
Если вызвать функцию с побочным эффектом дважды с одним и тем же набором значений входных аргументов, может случиться так, что в качестве результата будут возвращены разные значения.
Ну и что? Тут всё зависит от того устраивает такой результат или нет.
skalogryz
> а глобальная может переменится, потому что я вызывал некий метод, который при особой фазе луны вызывает другой метод, а тот друой, и вот последний меняет значение этой глобальной переменной по своему вкусу.
> сайд-эффект.
Если накодили особую фазу Луны значит она нужна, опять же нужно разобраться в коде и узнать что это за особая фаза Луны.
skalogryz
> Возвращаясь к гото. В чём проблема сайд-эффектов - они неочивидны.
> Нужно сделать какой-то колдунство, чтобы добиться такого-то результата.
И снова всё дело в том что код нужно понимать.
skalogryz
> Упороться по гото, и написать код, который будет иметь неочевидное поведение вполне можно.
Для меня почти весь чужой код неочевидный, особенно я ненавижу лямда переменные, это лишь говорит о моей квалификации.
totoro
> Есть такое понятие - корпоративная культура, это когда в течение некоторого времени новоприбывший погружается в кодовую базу продукта и начинает выполнять свою часть работы, придерживаясь общепринятых норм, негласных правил и подходов к программированию, принятых в коллективе. Если этого не происходит, таких, как правило, либо увольняют, либо переводят в петушатню другой отдел, если контора достаточно крупная. Вот там - пожалуйста, цветовая дифференциация и ранжирование на фрукты-овощи во все поля ;)
Ложил я болт на негласные правила.
Имбирная Ведьмочка
> Если умеешь программировать — то просто делаешь Х как надо. Если не умеешь — то учишься, затем просто делаешь Х как надо. В Х подставляется и "гоуту", и "ооп", и "солид", и всё остальное на свете. Даже туалетной бумагой дети овладевают не с первого раза.
С одной стороны ты прав. Но это приводит к багам или бракам на заводах, так как некоторые технические процессы далеко не каждый может освоить, а работать кому то надо. Человеческий фактор нужно всегда учитывать. Если большинство солид так и не освоили, это может быть проблема в солиде, а не в большинстве.
skalogryz
> ну т.е. всё правильно просиходит?!
> в учебных заведениях преподаётся, что гото есть, но использовать его нельзя.
> на работе старшие коллеги, гото не используют, и говорят, что код ревью не пройдёт, если попытаешься гото написать.
> человек вырастает программируя без гото, и передаёт свой опыт дальше.
На работе и в учебных заведения нужно делать то что говорят и как говорят. В учебных заведения заставляют учить динозавров, квантовую физику и политологию. Ну а про работу думаю у каждого найдётся своя история.
Dexus
>Есть много разных способов как имитировать goto, без goto, но выглядят они уродливее goto, со структурной и смысловой точки зрения, как сраное лицемерие они выглядят
Допустим, выполняется некоторая процедура. В ней есть набор локальных переменных и в итоге получается какой-то результат. Иногда не только он, также могут обрабатываться и глобальные переменные. Если используются операторы условия, множественного условия, циклы, то программист всё продумывает и на выходе процедуры либо один результат, либо другой, либо третий и т.д.
А если GOTO? Выполнение программы перескакивает с одной точки на другую (как космический корабль в фильме "Полёт навигатора"), контекст выполнения процедуры где-то повисает, и что в этом хорошего?
RikiTikiTak
> Если в коде не разобрался, то нужно разобраться прежде чем его править.
а это уже выливается в проблему цены разработки.
чтобы внести некую "малую функциональную правку", нужно знать все 100% проекта, или малую часть проекта, которая касается правки 0.05%?
добавляется новый участник команды - он полезен сразу, с теми базовыми знаниями с которыми он был нанят?
или ему, чтобы стать полезным, нужно сначала понять все 100% проекта... или просто чтобы он изучил ту малую часть, которая будет касаться правки?
Почему существует такая вещь, как рынок корпоротивного софта?!
(в теории есть проблема с программным обеспечением, как продуктом - написал один раз, и всё!)
Потому что в какой-то момент, конкретный продукт доводится до состояния, что его становится слишком дорого поддерживать (вносить правки).
Те люди, кто "знали 100%" - ушли. А сами условия поддержки софта (договор), не обеспечивает обучение нового пресонала знать 100%.
В итоге клиент терпит-терпит, а потом в тихучеку уходит к конкуренту (и история повторяется).
По-этому "нужно знать 100% проекта" в долгосрочной перспективе - плохо.
Нужна модульность (куски кода друг от друга независят)
Отсутствие глобальных привязок.
Отсуствие неочевидностей.
RikiTikiTak
> Если накодили особую фазу Луны значит она нужна, опять же нужно разобраться в коде и узнать что это за особая фаза Луны.
> И снова всё дело в том что код нужно понимать.
да надо. но дорого.
лично я могу разобраться за бесплатно, из чувства профессиональной гордости и самоуважения.
но этого мало. Нет гарантии, что каждый участник проекта пойдёт на те же жертвы.
true_bump
> Если используются операторы условия, множественного условия, циклы, то программист всё продумывает и на выходе процедуры либо один результат, либо другой, либо третий и т.д.
а если при множественных циклах, при разных условиях, должен быть определённый результат? И при чём в разных ситуациях разный.
В таких ситуациях goto нивелирует лишний код, когда в этой же ситуации, пытаться ещё условия прописать, даст больше лапшекода, лишних функций, которые практически ни чего не делают или что-нибудь подобное.
Мы не можем говорить за всех. Мы можем говорить только за себя. И, если в определённой ситуации я использую goto, то это не значит, что в конечном коде он будет. И точно так же наоборот, если его нет в коде, то не факт что в конечном коде его не будет.
Всё зависит от решения. Лишь одно правильно более-менее, если нет необходимости использовать goto в данной ситуации, то и не надо специально его туда засовывать.
true_bump
> Лично я давно забыл про GOTO. Я даже Exit и Break стараюсь стороной обходить, если возможно
Например, есть какой-то worker выполняющий длительную, сложную, пошаговую операцию (какой-то технологический процесс имитируется) и в какой-то (любой произвольный от 0 до 100% до завершения) момент оператор нажал кнопку отмена, нужно последовательно выйти из всех циклов и привести систему в изначальное состояние. Вот эти вот брейки с флагом отмены превращают код в адище.
Mirrel
> В таких ситуациях goto нивелирует лишний код, когда в этой же ситуации, пытаться ещё условия прописать, даст больше лапшекода, лишних функций, которые практически ни чего не делают или что-нибудь подобное.
Вынос ветки кода в отдельную процедуру/функцию и/или тернарные операторы избавляют от необходимости goto почти в 100% кода, занимающегося вычислениями, в котором нет циклов ожидания.
0iStalker
> момент оператор нажал кнопку отмена, нужно последовательно выйти из всех циклов и привести систему в изначальное состояние.
Гугол привил решение этой проблемы: вложенные циклы выносим в отдельнй процесс.
По отмене процесс прибиваем. Управлающие приложение (система) вернулась в изначальное состояние :)
skalogryz
> Гугол привил решение этой проблемы: вложенные циклы выносим в отдельнй процесс.
Кошке понятно, что worker в отдельном потоке работает, чтобы GUI не зависал. В изначальное состояние, это значит что в него и аппаратуру нужно вернуть (отключить высоковольтные блоки питания, отключить ТЭН, вентиляторы, итд) - т.е. нужно не просто прибить поток, но и выполнить завершающий код, перед этим