Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет mumuntu ([info]mumuntu)
@ 2005-04-17 07:40:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
[OnProgramming]
Коллеги устроили настоящее безумие в комментариях.

- Как выйти из вложенных циклов?
- последовательными break.


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

Я тут в памяти покопался, единственный раз, когда я goto использовал за последние 8 лет, был при программировании на ассемблере.
Там, как бы, без этого никак.
Нафиг писать такие вложенные циклы, из которых потом выходить последовательными break, я тоже не очень понимаю.
Но такое я в работе и сам допускал, каюсь. Потому что лениво было сразу по-человечески написать.


(Добавить комментарий)


[info]bofhland@lj
2005-04-16 23:43 (ссылка)
В Perl удобно -- break по метке. Из огромной кучи чего вложенного вылезти можно в момент.

Другое дело, а нафиг до такого доводить.

(Ответить) (Ветвь дискуссии)


[info]alexclear@lj
2005-04-16 23:50 (ссылка)
Другое дело, а нафиг до такого доводить.

Вот и я о том же.

(Ответить) (Уровень выше)


[info]opensourcer@lj
2005-04-17 00:25 (ссылка)
Бох мой, какая темнь несусветная! :-))))

Напомнило о реализации начинающими кодерами системы процессов операционки на Паскале (пишу примерно и по памяти):
Итак, кусок кода:

if SIGNAL="TERM" then do
begin
blah-blah;
end;
else if SIGNAL="KILL" then do
begin
blah-blah;
end;
else if SIGNAL="FAULT" then do
begin
blah-blah;
end;
else if SIGNAL="ERROR" then do
begin
blah-blah;
end;
else if SIGNAL=...


Если интересно, могу попробовать найти оригинал.

(Ответить) (Ветвь дискуссии)


[info]kotloff@lj
2005-04-17 04:16 (ссылка)
перед ELSE точка с запятой не ставицца.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]opensourcer@lj
2005-04-17 04:42 (ссылка)
Я довольно давно уже кодил на Паскале, поэтому, сомо собой, мог что-то забыть.

(Ответить) (Уровень выше)


[info]object@lj
2005-04-17 03:05 (ссылка)
Как там указали, break от goto мало чем отличается. И если уж довели до "последовательных break", то хрен редьки не слаще. Не надо до этого доводить. Но я не согласен с теми, кто пишет, что можно воспользоваться goto из практических соображений, "раз уж так вышло". Все же для программиста "не могу поступиться принципами" - довольно важное правило. Или надо переосмыслить принципы, или пройти по коду и сделать рефакторинг, или же получится такое спагетти, которое в итоге и вынудит смириться с goto.

(Ответить) (Ветвь дискуссии)


[info]ex_sighup150@lj
2005-04-17 06:09 (ссылка)
Это просто неправда.
Существуют случаи, в которых goto существенно повышает читаемость кода.
Вот, к примеру, обсуждение на эту тему, с примерами:
http://kerneltrap.org/node/553/2153

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]object@lj
2005-04-17 06:28 (ссылка)
Торвалдс там пишет: "I think goto's are fine, and they are often more readable than large amounts of indentation."

Вопрос в том, зачем нужно доводить до "large amounts of indentation". Читаемость кода следует повышать, когда он уже плохо читаем. В очень редких случаях типа программирование ядра операционной системы код следует разбивать на небольшие процедуры, сам размер которых должен препятствовать их нечитаемости. Поэтому ваш аргумент - он все же из той же серии, что и "как выйти из вложенных циклов". При всем уважении к Торвалдсу.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ex_sighup150@lj
2005-04-17 06:53 (ссылка)
Вы правы, но опять-таки -- есть ситуации, в которых код нельзя разбить на функции в несколько строк. В том же ядре есть функции в несколько экранов, в которых goto -- самый естественный путь устроить error handling.
Не говоря уж о случаях вроде TCP state machine.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]object@lj
2005-04-17 07:20 (ссылка)
Да, там возможен иной подход. И слепой отказ от гоуту становится догматизмом. Но многие ли из нас пишут system kernel? Большинство же на аппликациях сидит. И когда слышишь, что из седьмого уровня вложенности проще выйти через гоуту, это не убеждает.

(Ответить) (Уровень выше)


[info]alexclear@lj
2005-04-17 08:38 (ссылка)
Ну, программирование ядер операционных систем на pure C это отдельная тема.
В чистом C и исключений-то нет.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ex_sighup150@lj
2005-04-17 09:27 (ссылка)
В чистом C можно сделать похожие по семантике "исключения" при помощи setjmp/longjmp (в userspace).

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]alexclear@lj
2005-04-17 10:20 (ссылка)
Угу, я делал.
Так это тот же goto, считай. Даже эффективнее - можно запутать все гораздо быстрее.

(Ответить) (Уровень выше)


[info]ex_unexy646@lj
2005-04-17 05:24 (ссылка)
Настоящее безумие еще вчера было в science_freaks, когда один академичный товарищ яростно доказывал, что ООП и тому подобные технологии - шарлатанство. Доказывал не убедительно, в основном кричал, какие все уроды, подонки и гниды. Ту ветку комментариев удалили, к сожалению. :)

(Ответить) (Ветвь дискуссии)


[info]bopm@lj
2005-04-17 07:10 (ссылка)
А это вообще любимая песня всех времен и народов.

(Ответить) (Уровень выше)


[info]bopm@lj
2005-04-17 07:11 (ссылка)
Я вот тоже не помню случая когда бы мне понадобился goto. Но это лишь потому, что я пытаюсь писать максимально простой код. Но как я там сказал: пусть расцветают сто цветов.

(Ответить)


[info]ex_sighup150@lj
2005-04-17 07:35 (ссылка)
Кстати, а зачем ты это читаешь? (ру_программинг, в смысле). Как ни посмотрю -- сборище слабых умом, натурально.

(Ответить) (Ветвь дискуссии)


[info]alexclear@lj
2005-04-17 08:40 (ссылка)
Да я у кого-то из коллег увидел ссылку.
Пошел, натурально проперся.

(Ответить) (Уровень выше)


[info]lazy_jet@lj
2005-04-17 09:45 (ссылка)
Был один случай, когда без 1 goto я не придумал, как ЭТО делать.
Жалко, уже забыл, что такое было ЭТО....

(Ответить) (Ветвь дискуссии)


[info]lazy_jet@lj
2005-04-18 04:02 (ссылка)
И предлагаю тебе более концептуальный юзерпик:
Image

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]alexclear@lj
2005-04-18 22:30 (ссылка)
Да это же АК!
Я у кого-то уже видел такой юзерпик.
На самом деле, я не хотел себе менять юзерпик, так получилось.
Вот оплачу ЖЖ и верну все на место.

(Ответить) (Уровень выше)