Re[6]: готофобам к размышлению
От: vpchelko  
Дата: 09.02.12 13:44
Оценка: -2 :)
Здравствуйте, jazzer, Вы писали:

J>особенно хорошо "эта каша" заворачивается в отдельную функцию, если у тебя в функции штук 20 локальных переменных.


Это уже говнокод
Сало Украине, Героям Сала
Re[4]: готофобам к размышлению
От: quwy  
Дата: 09.02.12 14:34
Оценка:
Здравствуйте, jazzer, Вы писали:

J>э-э-э... даешь мастер-класс?

Цикл for существует для вполне определенного количества итераций, принудительный выход из такого цикла вообще дурной тон. Но если руки чешутся, то сишный фор отлично завершается по флажку:
for(i = 0; i < 10 && !stop; ++i)
Re[7]: готофобам к размышлению
От: jazzer Россия Skype: enerjazzer
Дата: 09.02.12 14:40
Оценка: 2 (2) +6
Здравствуйте, vpchelko, Вы писали:

V>Здравствуйте, jazzer, Вы писали:


J>>особенно хорошо "эта каша" заворачивается в отдельную функцию, если у тебя в функции штук 20 локальных переменных.


V>Я не знаю и знать не хочу такие функции. Если есть логически связанный набор переменных — их заворачивают в структуру. Если они не связаны логически , то нехрен им делать в одной функции.


Сколько трудов и пафоса, и все только ради того, чтоб избавиться от goto (который тут совершенно к месту, ибо нет другого способа в языке для выхода из нескольких уровней циклов). Готофобия в чистом виде.

Я даже боюсь себе представить, как будет выглядеть какой-нть вычислительный алгоритм (пуассон/лаплас на конечных элементах, скажем) в твоем исполнении Каждая пара циклов отдельной функцией, все данные, с которыми цикл работает — отдельной структурой, поскольку разным циклам нужно слегка разное, надо еще иерархию этих структур заделать и паттерн позаковыристее применить... Не, чур меня, а то не засну потом...
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[5]: готофобам к размышлению
От: jazzer Россия Skype: enerjazzer
Дата: 09.02.12 15:11
Оценка:
Здравствуйте, quwy, Вы писали:

Q>Здравствуйте, jazzer, Вы писали:


J>>э-э-э... даешь мастер-класс?

Q>Цикл for существует для вполне определенного количества итераций, принудительный выход из такого цикла вообще дурной тон. Но если руки чешутся, то сишный фор отлично завершается по флажку:
Q>
Q>for(i = 0; i < 10 && !stop; ++i)
Q>


ты мой цикл перепиши таким вот образом, вместе посмеемся, ага.

PS если тебе нужно из середины цикла выйти, на условие же придется переходить через, прости господи, continue, а это ж, прости господи, замаскированный goto
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: готофобам к размышлению
От: VEAPUK  
Дата: 09.02.12 15:59
Оценка:
Здравствуйте, TimurSPB, Вы писали:

J>>вывод ? goto сила

TSP>Сила. Но сила эта слабеет. Человеку с внутренней дисциплиной не подобает писать код с goto

Пусть это делает компилятор и прочие?
Re[2]: готофобам к размышлению
От: VEAPUK  
Дата: 09.02.12 16:01
Оценка:
Здравствуйте, maykie, Вы писали:

M>Всё дело в том, что большая часть готофобов стала таковой из-за Дейкстры с его goto considered harmful. Правда дальше названия они ниасилили, так как там много букв и стиль текста сложный — иначе бы они поняли что не всякий goto плох.


Он имел ввиду "фортрановский стиль"...
Re[2]: готофобам к размышлению
От: RonWilson Россия  
Дата: 09.02.12 16:15
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, jyuyjiyuijyu, Вы писали:

J>>вывод ? goto сила
MC>А то. Очень хороший способ подчищать за собой в отсутствии try/finally или raii. Вот типа того:
MC>
MC>aquire resource

MC>do something
MC>if error goto release

MC>do something else

MC>release:
MC>  release resource
MC>


судя по книге Хелен Кастлер Windows NT Inside причем буквально в первых главах было обоснование языка программирования (мажорного, никто не говорит, что на нем все написано внутри): язык C стандарта такого-то с расширениями для поддержки исключений (насколько понял, речь идет о SEH а не плюсовых)
Re[8]: готофобам к размышлению
От: vpchelko  
Дата: 09.02.12 16:19
Оценка:
Здравствуйте, jazzer, Вы писали:

Только почему-то сколько я пишу код, и не разу не появлялось желание использовать goto. Хз как-так получается...
Сало Украине, Героям Сала
Re[9]: готофобам к размышлению
От: jyuyjiyuijyu  
Дата: 09.02.12 16:52
Оценка:
Здравствуйте, vpchelko, Вы писали:

V>Только почему-то сколько я пишу код, и не разу не появлялось желание использовать goto. Хз как-так получается...


а меня всегда удивляло как у кого то может никогда не возникать желания заюзать goto он иногда очень очень к месту даже сейчас выкопаю код и приведу пример минутку..
вот например из одной утилиты (кто не узнал это linux списки linux/list.h)
конечно если бы в этой задаче с самого начала использовались деревья то
этой процедуры и вовсе не было бы но мы тут рассматриваем язык а не архитектурные
решения так что считаю уместный пример
static VOID CheckUnique(list_head *liblist, list_head *apilist)
{
again_scan:
    apiitem *apiel;
    list_for_each_entry(apiel, apilist, link)
    {
        libitem *libel;
        list_for_each_entry(libel, liblist, link)
        {
            apiitem *apiuniqel;
            list_for_each_entry(apiuniqel, &libel->apilist, link)
            {
                if (!strcmp(apiuniqel->szApi, apiel->szApi))
                {
                    ...processing...
                    goto  again_scan;

ну тут даже флажок не влепиш так что тут выход один разбить на несколько функций но это связано с некоторыми проблемами о которых уже упоминали 1) передача контекста туда сюда 2) только усложняет понимание так как задача одно целое дальнейшее дробление бессмысленно
я не говорю что не надо делить большую задачу на подзадачи надо но есть грань при переходе которой дробление будет только усложнять восприятие
Re[9]: готофобам к размышлению
От: jazzer Россия Skype: enerjazzer
Дата: 09.02.12 16:53
Оценка: +6
Здравствуйте, vpchelko, Вы писали:

V>Только почему-то сколько я пишу код, и не разу не появлялось желание использовать goto. Хз как-так получается...

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

Плюс структура — нифига не замена пачке локальных переменных, так как объект структуры у тебя с самого начала рождается целиком со всеми своими членами, в то время как локальные переменные вводятся по мере необходимости и доступности данных для инициализации, и поэтому могут быть ссылками, константами и т.п. — то, что невозможно со структурами.
Плюс локальные переменные на порядок лучше оптимизируются компилятором, по сравнению с аргументами функций, а уж тем более по сравнению со структурами.
Например, структура обязана лежать в памяти одним большим куском, в то время как локальные переменные компилятор может распихать по регистрам и вообще память не юзать для них.

Ну и послушай себя — вот у тебя была функция с двойным циклом, полностью тебя устраивала и все хорошо работало.
Вдруг в один прекрасный момент тебя осеняет, что если внутри цикла выполняется определенное условие, то можно дальше не считать и цикл прервать.
Я в таком случае поставлю goto на после цикла и горя знать не буду, а что сделаешь ты?
Выделишь цикл в отдельную функцию, начнешь возиться с локальными переменными, изобретать какие-то левые структуры — и все для чего? Столько "риска и романтики" — и всего лишь для того, чтоб не написать goto?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[10]: готофобам к размышлению
От: vpchelko  
Дата: 09.02.12 17:04
Оценка: :)
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>Здравствуйте, vpchelko, Вы писали:


J>а меня всегда удивляло как у кого то может никогда не возникать желания заюзать goto он иногда очень очень к месту даже сейчас выкопаю код и приведу пример минутку..

J>вот например из одной утилиты (кто не узнал это linux списки linux/list.h)
J>конечно если бы в этой задаче с самого начала использовались деревья то
J>этой процедуры и вовсе не было бы но мы тут рассматриваем язык а не архитектурные
J>решения так что считаю уместный пример
J>
J>static VOID CheckUnique(list_head *liblist, list_head *apilist)
J>{
J>again_scan:
J>    apiitem *apiel;
J>    list_for_each_entry(apiel, apilist, link)
J>    {
J>        libitem *libel;
J>        list_for_each_entry(libel, liblist, link)
J>        {
J>            apiitem *apiuniqel;
J>            list_for_each_entry(apiuniqel, &libel->apilist, link)
J>            {
J>                if (!strcmp(apiuniqel->szApi, apiel->szApi))
J>                {
J>                    ...processing...
J>                    goto  again_scan;
                
J>

J>ну тут даже флажок не влепиш так что тут выход один разбить на несколько функций но это связано с некоторыми проблемами о которых уже упоминали 1) передача контекста туда сюда 2) только усложняет понимание так как задача одно целое дальнейшее дробление бессмысленно
J>я не говорю что не надо делить большую задачу на подзадачи надо но есть грань при переходе которой дробление будет только усложнять восприятие

Ужас, тяжело читать такой код.
Сало Украине, Героям Сала
Re[11]: готофобам к размышлению
От: jyuyjiyuijyu  
Дата: 09.02.12 17:13
Оценка:
Здравствуйте, vpchelko, Вы писали:

V>Ужас, тяжело читать такой код.


сам в шоке )) линукс списки и венгерская нотация это аццкий венегрет и имена переменных адские
Re: готофобам к размышлению
От: PSV100  
Дата: 09.02.12 19:43
Оценка:
Хм... Lua — крайне консервативный, лаконичный и стройный язык: ни грамма лишнего. И только совсем недавно за столько лет специально ввели goto в язык — толп с плакатами в Бразилии замечено не было...
Re[2]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 09.02.12 19:58
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, jyuyjiyuijyu, Вы писали:

J>>вывод ? goto сила
MC>А то. Очень хороший способ подчищать за собой в отсутствии try/finally или raii. Вот типа того:
MC>
MC>aquire resource
MC>do something
MC>if error goto release

MC>do something else

MC>release:
MC>  release resource
MC>

Сравним:
aquire resource
do something
switch(1) case 1: default:
{
  if error break;

  do something else break;
}
release resource
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re: готофобам к размышлению
От: MescalitoPeyot Украина  
Дата: 09.02.12 20:03
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>вывод ? goto сила


Сила. Если мне вдруг внезапно понадобиться наваять достаточно крупный проект на голом С то я напишу его на Objective-C, там рантайм не такой уж и тяжелый, можно и на железку затянуть впишу его в проектный гайдлайн и буду использовать для очистки ресурсов в обязательном порядке. Все юноши с горящим взором и прочие снобы идут лесом.
Re[3]: готофобам к размышлению
От: Cyberax Марс  
Дата: 09.02.12 20:14
Оценка: +2
Здравствуйте, Vain, Вы писали:

V>Сравним:

Жуть — я про изнасилование switch'а.
Sapienti sat!
Re[10]: готофобам к размышлению
От: vpchelko  
Дата: 09.02.12 20:34
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Ну и послушай себя — вот у тебя была функция с двойным циклом, полностью тебя устраивала и все хорошо работало.

J>Вдруг в один прекрасный момент тебя осеняет, что если внутри цикла выполняется определенное условие, то можно дальше не считать и цикл прервать.
J>Я в таком случае поставлю goto на после цикла и горя знать не буду, а что сделаешь ты?
J>Выделишь цикл в отдельную функцию, начнешь возиться с локальными переменными, изобретать какие-то левые структуры — и все для чего? Столько "риска и романтики" — и всего лишь для того, чтоб не написать goto?

Сколько я такие циклы пишу, на VB, на java на powershell — чет аналогов goto не приходилось использовать.
Сало Украине, Героям Сала
Re[11]: готофобам к размышлению
От: Cyberax Марс  
Дата: 09.02.12 23:14
Оценка: :)
Здравствуйте, vpchelko, Вы писали:

J>>Выделишь цикл в отдельную функцию, начнешь возиться с локальными переменными, изобретать какие-то левые структуры — и все для чего? Столько "риска и романтики" — и всего лишь для того, чтоб не написать goto?

V>Сколько я такие циклы пишу, на VB, на java на powershell — чет аналогов goto не приходилось использовать.
Попробуй написать что-нибудь, связанное со сложными вычислениями.
Sapienti sat!
Re[12]: готофобам к размышлению
От: vpchelko  
Дата: 10.02.12 00:31
Оценка: :)
Здравствуйте, Cyberax, Вы писали:

C>Попробуй написать что-нибудь, связанное со сложными вычислениями.


Библиотеку OpenCV юзал. Но тоже не приходилось.
Сало Украине, Героям Сала
Re[4]: готофобам к размышлению
От: Vain Россия google.ru
Дата: 10.02.12 00:45
Оценка: -2
Здравствуйте, Cyberax, Вы писали:

V>>Сравним:

C>Жуть — я про изнасилование switch'а.
уж лучше чем goto.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.