Здравствуйте, jazzer, Вы писали:
J>э-э-э... даешь мастер-класс?
Цикл for существует для вполне определенного количества итераций, принудительный выход из такого цикла вообще дурной тон. Но если руки чешутся, то сишный фор отлично завершается по флажку:
Здравствуйте, vpchelko, Вы писали:
V>Здравствуйте, jazzer, Вы писали:
J>>особенно хорошо "эта каша" заворачивается в отдельную функцию, если у тебя в функции штук 20 локальных переменных.
V>Я не знаю и знать не хочу такие функции. Если есть логически связанный набор переменных — их заворачивают в структуру. Если они не связаны логически , то нехрен им делать в одной функции.
Сколько трудов и пафоса, и все только ради того, чтоб избавиться от goto (который тут совершенно к месту, ибо нет другого способа в языке для выхода из нескольких уровней циклов). Готофобия в чистом виде.
Я даже боюсь себе представить, как будет выглядеть какой-нть вычислительный алгоритм (пуассон/лаплас на конечных элементах, скажем) в твоем исполнении Каждая пара циклов отдельной функцией, все данные, с которыми цикл работает — отдельной структурой, поскольку разным циклам нужно слегка разное, надо еще иерархию этих структур заделать и паттерн позаковыристее применить... Не, чур меня, а то не засну потом...
Здравствуйте, quwy, Вы писали:
Q>Здравствуйте, jazzer, Вы писали:
J>>э-э-э... даешь мастер-класс? Q>Цикл for существует для вполне определенного количества итераций, принудительный выход из такого цикла вообще дурной тон. Но если руки чешутся, то сишный фор отлично завершается по флажку: Q>
Q>for(i = 0; i < 10 && !stop; ++i)
Q>
ты мой цикл перепиши таким вот образом, вместе посмеемся, ага.
PS если тебе нужно из середины цикла выйти, на условие же придется переходить через, прости господи, continue, а это ж, прости господи, замаскированный goto
Здравствуйте, maykie, Вы писали:
M>Всё дело в том, что большая часть готофобов стала таковой из-за Дейкстры с его goto considered harmful. Правда дальше названия они ниасилили, так как там много букв и стиль текста сложный — иначе бы они поняли что не всякий goto плох.
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, jyuyjiyuijyu, Вы писали: J>>вывод ? goto сила MC>А то. Очень хороший способ подчищать за собой в отсутствии try/finally или raii. Вот типа того: MC>
судя по книге Хелен Кастлер Windows NT Inside причем буквально в первых главах было обоснование языка программирования (мажорного, никто не говорит, что на нем все написано внутри): язык C стандарта такого-то с расширениями для поддержки исключений (насколько понял, речь идет о SEH а не плюсовых)
Здравствуйте, vpchelko, Вы писали:
V>Только почему-то сколько я пишу код, и не разу не появлялось желание использовать goto. Хз как-так получается...
а меня всегда удивляло как у кого то может никогда не возникать желания заюзать goto он иногда очень очень к месту даже сейчас выкопаю код и приведу пример минутку..
вот например из одной утилиты (кто не узнал это linux списки linux/list.h)
конечно если бы в этой задаче с самого начала использовались деревья то
этой процедуры и вовсе не было бы но мы тут рассматриваем язык а не архитектурные
решения так что считаю уместный пример
ну тут даже флажок не влепиш так что тут выход один разбить на несколько функций но это связано с некоторыми проблемами о которых уже упоминали 1) передача контекста туда сюда 2) только усложняет понимание так как задача одно целое дальнейшее дробление бессмысленно
я не говорю что не надо делить большую задачу на подзадачи надо но есть грань при переходе которой дробление будет только усложнять восприятие
Здравствуйте, vpchelko, Вы писали:
V>Только почему-то сколько я пишу код, и не разу не появлялось желание использовать goto. Хз как-так получается...
Ну кто ж тебя знает, какой ты там код пишешь, может, базы данных и гуй, там заковыристых двойных циклов и не бывает.
А если посмотришь на любые вычматы — там куча всего кэшируется в локальных переменных, чтоб по нескольку раз не считать, поэтому их так много.
Плюс структура — нифига не замена пачке локальных переменных, так как объект структуры у тебя с самого начала рождается целиком со всеми своими членами, в то время как локальные переменные вводятся по мере необходимости и доступности данных для инициализации, и поэтому могут быть ссылками, константами и т.п. — то, что невозможно со структурами.
Плюс локальные переменные на порядок лучше оптимизируются компилятором, по сравнению с аргументами функций, а уж тем более по сравнению со структурами.
Например, структура обязана лежать в памяти одним большим куском, в то время как локальные переменные компилятор может распихать по регистрам и вообще память не юзать для них.
Ну и послушай себя — вот у тебя была функция с двойным циклом, полностью тебя устраивала и все хорошо работало.
Вдруг в один прекрасный момент тебя осеняет, что если внутри цикла выполняется определенное условие, то можно дальше не считать и цикл прервать.
Я в таком случае поставлю goto на после цикла и горя знать не буду, а что сделаешь ты?
Выделишь цикл в отдельную функцию, начнешь возиться с локальными переменными, изобретать какие-то левые структуры — и все для чего? Столько "риска и романтики" — и всего лишь для того, чтоб не написать goto?
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>Здравствуйте, vpchelko, Вы писали:
J>а меня всегда удивляло как у кого то может никогда не возникать желания заюзать goto он иногда очень очень к месту даже сейчас выкопаю код и приведу пример минутку.. J>вот например из одной утилиты (кто не узнал это linux списки linux/list.h) J>конечно если бы в этой задаче с самого начала использовались деревья то J>этой процедуры и вовсе не было бы но мы тут рассматриваем язык а не архитектурные J>решения так что считаю уместный пример J>
J>ну тут даже флажок не влепиш так что тут выход один разбить на несколько функций но это связано с некоторыми проблемами о которых уже упоминали 1) передача контекста туда сюда 2) только усложняет понимание так как задача одно целое дальнейшее дробление бессмысленно J>я не говорю что не надо делить большую задачу на подзадачи надо но есть грань при переходе которой дробление будет только усложнять восприятие
Хм... Lua — крайне консервативный, лаконичный и стройный язык: ни грамма лишнего. И только совсем недавно за столько лет специально ввели goto в язык — толп с плакатами в Бразилии замечено не было...
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, jyuyjiyuijyu, Вы писали: J>>вывод ? goto сила MC>А то. Очень хороший способ подчищать за собой в отсутствии try/finally или raii. Вот типа того: MC>
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>вывод ? goto сила
Сила. Если мне вдруг внезапно понадобиться наваять достаточно крупный проект на голом С то я напишу его на Objective-C, там рантайм не такой уж и тяжелый, можно и на железку затянуть впишу его в проектный гайдлайн и буду использовать для очистки ресурсов в обязательном порядке. Все юноши с горящим взором и прочие снобы идут лесом.
Здравствуйте, jazzer, Вы писали:
J>Ну и послушай себя — вот у тебя была функция с двойным циклом, полностью тебя устраивала и все хорошо работало. J>Вдруг в один прекрасный момент тебя осеняет, что если внутри цикла выполняется определенное условие, то можно дальше не считать и цикл прервать. J>Я в таком случае поставлю goto на после цикла и горя знать не буду, а что сделаешь ты? J>Выделишь цикл в отдельную функцию, начнешь возиться с локальными переменными, изобретать какие-то левые структуры — и все для чего? Столько "риска и романтики" — и всего лишь для того, чтоб не написать goto?
Сколько я такие циклы пишу, на VB, на java на powershell — чет аналогов goto не приходилось использовать.
Здравствуйте, vpchelko, Вы писали:
J>>Выделишь цикл в отдельную функцию, начнешь возиться с локальными переменными, изобретать какие-то левые структуры — и все для чего? Столько "риска и романтики" — и всего лишь для того, чтоб не написать goto? V>Сколько я такие циклы пишу, на VB, на java на powershell — чет аналогов goto не приходилось использовать.
Попробуй написать что-нибудь, связанное со сложными вычислениями.