LINUX.ORG.RU
ФорумTalks

кто тут не любит goto?


0

2

Зачастую оператор goto поможет сильно упростить жизнь или же вообще является единственной вменяемой возможностью.

Например обход в цикле массива переменной размерности без goto реализуется через рекурсию, которая, вообще говоря, не везде разрешена.

★★★★★
Ответ на: комментарий от quantum-troll

У циклов на самом деле два условия продолжения: (счётчик < предел) и (!found), только при использовании goto второе условие как бы неявное. Указать оба условия в заголовке цикла — в глазах некоторых программистов очень даже красиво, ящетаю.

Xenesz ★★★★
()

Я слышал что goto ломает оптимизацию, потому как компилятор не может прикинуть структуру программы. Так ли это?

Еще кто-нибудь может подсказать: если находясь во внутреннем цикле мне надо сделать continue во внешнем, как это правильно делается в c++? В джаве есть метки цикла, а про плюсы я как-то не знаю, толком не изучал их никогда.

morse ★★★★★
()
Ответ на: комментарий от Xellos

Я уже сказал - да, goto вполне пригоден для написания уродливого, неотлаживаемого и неподдерживаемого кода. Всё верно.

Ты через строчку читаешь? Обфускацию делают чтобы другие не могли прочитать код, какие в таком случае могут быть разговоры о читабельности кода? Автор кода может писать как ему удобно. И таких случаев большинство.

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

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

TDrive ★★★★★
()
Ответ на: комментарий от slackwarrior

Омг, где я писал что нужно в ручную обфускацию делать? Там было написано что не все хотят чтобы их код потом кто то читал.

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

Нет, по моей логике у детей спички надо отбирать. И выдать обратно только после того, как они научатся ими пользоваться.

Это ты через строчку читаешь. Слова «неотлаживаемого и неподдерживаемого» ты пропустил, да?

Xellos ★★★★★
()
Ответ на: комментарий от Xellos

Слова «неотлаживаемого и неподдерживаемого» ты пропустил, да?

Отладкой и поддержкой кода должен заниматься его автор, а для автора свой код всегда читабелен.

TDrive ★★★★★
()
Ответ на: комментарий от Xellos

Есть два блока кода условно назовём их A и B. В этих блоках присутствуют вложенные циклы.Эти блоки идут последовательно:

A,

B.

A - начальный обработчик данных. B - последующий обработчик. В некоторых местах блока B есть условие, при котром надо начать всё заново с начального блока A. И по моему скромному мнению сдесь вполне уместно и логично посредством goto перейти на A.

zhekas
()
Ответ на: комментарий от TDrive

если ты всегда помниш(после взгляда на страницу с кодом) что делает твой код даже если ты его писал больше 5 лет - значит ты тюниш 5 лет один проект :(

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

Или нет проблем с памятью. Досконально естественно не запомнишь, но знакомые логические конструкции должен узнавать в своём коде.

TDrive ★★★★★
()
Ответ на: комментарий от qulinxao

значит ты тюниш 5 лет один проект :(

Ядру линукса 10 лет. Глупый Линус Торвальдс 10 лет тюнит один проект?:(

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

А это каким образом относится к теме?

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

На умного не тянешь

До тебя мне и в самом деле далеко.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

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

У меня таких проблем ещё не было но возможно. И как это относится к goto? Если для тебя сложно воспринимать свой код в котором есть goto просто не используй его. Зачем навязывать это другим? Люди разные и память у всех разная. Почему все должны равняться на тебя?

До тебя мне и в самом деле далеко.

Молодец, что признаёшь это.

TDrive ★★★★★
()
Ответ на: комментарий от tailgunner

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

TDrive ★★★★★
()
Ответ на: комментарий от Zodd

Вместо этого

Садитесь, два. Вы вообще понимаете, что делает «val0 & val1»?

В оригинале можно (и нужно) обойтись без goto более читабельным и логичным способом.

andreyu ★★★★★
()
Ответ на: комментарий от TDrive

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

Похоже, что опыта разработки у вас еще очень и очень мало. Вы говорите очевидные глупости, споря с более опытными оппонентами.

andreyu ★★★★★
()
Ответ на: комментарий от TDrive

Ты внутрь jquery.min.js заглядывал когда-нибудь? Оно сильно читабельно?

Xellos ★★★★★
()
Ответ на: комментарий от andreyu

Там goto вообще лишний. Он ведёт ровно на «окончание проверок». Если это оптимизация, то надо было использовать волшебный оператор else.

Xellos ★★★★★
()
Ответ на: комментарий от Xellos

Там goto вообще лишний. Он ведёт ровно на «окончание проверок». Если это оптимизация, то надо было использовать волшебный оператор else.

А я что сказал? :)

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Просто я первый раз внимательно посмотрел на ту лапшу.

Xellos ★★★★★
()
Ответ на: По ночам надо спать от Zodd

Эта отмазка не катит.

val1 && val2 где val2 не 0, проверяет val1 на ноль или не ноль.

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от TDrive

в ручную

Это тоже «об фускация», чтоб комментарий потом никто не читал? :) Почему при рассуждении в треде про (не)использование goto программистами, должна кого-то волновать эта ваша обфускация, выполняемая невручную? Срач вокруг goto - проблема стиля, а не хитровы5.1ной кодогенерации, на которую даже читателям активной гражданской позицией по5.1

slackwarrior ★★★★★
()
Ответ на: комментарий от Eddy_Em

100500 ненужных if'ов.

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

Xenesz ★★★★
()
Ответ на: комментарий от Xenesz

Циклов и ветвлений ровно столько

if'ов по крайней мере на (N-1)(M-1) больше. Кстати, конструкция (k=1; k<t;t++) в исходном посте - просто прелесть. Отличный шанс зациклиться до бесконечности.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Если ты под if'ом подразумеваешь проверку условия в for, то да, их больше. Теперь надо бы показать, что обойдётся дороже, дополнительные такты или искривление структурности кода.

t++ автор дальше по треду пофиксил (а я таки проморгал).

Xenesz ★★★★
()
Ответ на: комментарий от Xenesz

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

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

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

если вспомнить, что и циклы в конце-концов реализуются через goto, то зачем париться?

Нехай компилятор оптимизирует, у него работа такая. Он и в последовательность может развернуть, а в сырцах пусть будет читабельно.

Xenesz ★★★★
()
Ответ на: комментарий от Reset

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

ну найди, и покажи.

drBatty ★★
()
Ответ на: комментарий от drBatty

grep goto * -R выдает аж 92525 примеров

вот, например, канонический вариант

drivers/acpi/processor_throttling.c:105

ядро 3.3.4

Reset ★★★★★
()
Ответ на: комментарий от TDrive

Ты через строчку читаешь? Обфускацию делают чтобы другие не могли прочитать код, какие в таком случае могут быть разговоры о читабельности кода? Автор кода может писать как ему удобно. И таких случаев большинство.

у тебя программа будет версии 1.0? Версии 1.1 не будет? Или версию 1.1 ты будешь писать с нуля?

И что? Паранойя начинается при виде goto в коде?

не. goto в C это детектор. С вероятностью 146% goto написано быдлокодером.

drBatty ★★
()
Ответ на: комментарий от TDrive

Отладкой и поддержкой кода должен заниматься его автор, а для автора свой код всегда читабелен.

понятно... ГСМ, такое ГСМ...

drBatty ★★
()
Ответ на: комментарий от drBatty

тебя программа будет версии 1.0? Версии 1.1 не будет? Или версию 1.1 ты будешь писать с нуля?

Сохранить исходники до обфускации религия запрещает?

TDrive ★★★★★
()
Ответ на: комментарий от drBatty

не. goto в C это детектор. С вероятностью 146% goto написано быдлокодером.

То есть все кто участвуют в написание ядра линукс - быдлокодеры? Ну да куда уж им до тебя.

TDrive ★★★★★
()
Ответ на: комментарий от qnikst

очевидно, что имелись ввиду циклы

ну если мы обходим многомерную матрицу, то можно во первых сделать функцию этого обхода, или (во вторых) приравнять счётчики обхода к своему конечному значению. Вариант с goto конечно имеет право на жизнь, но я не думаю, что он ВСЕГДА оптимален.

drBatty ★★
()
Ответ на: комментарий от TDrive

Сохранить исходники до обфускации религия запрещает?

зачем тебе вообще эта обфурскация нужна?

drBatty ★★
()
Ответ на: комментарий от TDrive

То есть все кто участвуют в написание ядра линукс - быдлокодеры?

лично я не вижу никакого криминала в goto, просто обычно его юзают те, кто писать код НЕ умеют. Лично я goto использую, примерно так 1 раз в год. Бывает удобно...

drBatty ★★
()
Ответ на: комментарий от drBatty

Ты еще многого не понимаешь.

ну уж куда уж мне...

Ты либо не скромничай, либо не бросайся фразами типа «быдлокодер с вероятностью 146%».

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.