C# goto, нужно ли избегать
От: Философ Ад http://vk.com/id10256428
Дата: 14.04.11 13:38
Оценка: -2 :)
Если можете предложить лучшее решение — предлагайте.

            Stack<PropertyInfo> stack2 = new Stack<PropertyInfo>();
            second:
            while (stack.Count > 0)
            {
                PropertyInfo pInfo = stack.Pop();
                count = CEntity.GetRelatedEntitiesProperties(pInfo.PropertyType, out api);

                foreach (PropertyInfo pInfo2 in api)
                {
                    p_Iwalker.ProcessNext(pInfo2);
                    stack2.Push(pInfo2);
                }
            }
            if (stack2.Count > 0)
            {
                //меняем местами стэки
                Stack<PropertyInfo> stackTmp = stack;
                stack = stack2;
                stack2 = stackTmp;
                goto second;
            }
Всё сказанное выше — личное мнение, если не указано обратное.
Re: C# goto, нужно ли избегать
От: andyag  
Дата: 14.04.11 13:45
Оценка: 3 (1)
Здравствуйте, Философ, Вы писали:

Ф>Если можете предложить лучшее решение — предлагайте.


Ф>
Ф>            Stack<PropertyInfo> stack2 = new Stack<PropertyInfo>();
Ф>            while(true)
              {
Ф>                while (stack.Count > 0)
Ф>                {
Ф>                    PropertyInfo pInfo = stack.Pop();
Ф>                    count = CEntity.GetRelatedEntitiesProperties(pInfo.PropertyType, out api);

Ф>                    foreach (PropertyInfo pInfo2 in api)
Ф>                    {
Ф>                        p_Iwalker.ProcessNext(pInfo2);
Ф>                        stack2.Push(pInfo2);
Ф>                    }
Ф>                }
Ф>                if (stack2.Count > 0)
Ф>                {
Ф>                    //меняем местами стэки
Ф>                    Stack<PropertyInfo> stackTmp = stack;
Ф>                    stack = stack2;
Ф>                    stack2 = stackTmp;
Ф>                    continue;
Ф>                }

                  break;
             }
Ф>
Re: C# goto, нужно ли избегать
От: RiNSpy  
Дата: 14.04.11 13:50
Оценка:
Абстрагируй всё в отдельный метод, goto не нужен.

Что-то вроде
while(stack.Count > 0)
{
    ProcessStack(stack, stack2);
    Swap(stack, stack2);
}
Swap(stack, stack2);


намного читабельнее даже без комментариев.
Re: C# goto, нужно ли избегать
От: HunteX http://troyashka.ru/
Дата: 14.04.11 13:54
Оценка:
Почитай это
Re: C# goto, нужно ли избегать
От: 0xC0DE  
Дата: 14.04.11 13:55
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Если можете предложить лучшее решение — предлагайте.


К примеру:

do
 {            
 Stack<PropertyInfo> stack2 = new Stack<PropertyInfo>();

 while (stack.Count > 0)
  {
  PropertyInfo pInfo = stack.Pop();
  count = CEntity.GetRelatedEntitiesProperties(pInfo.PropertyType, out api);

  foreach (PropertyInfo pInfo2 in api)
   {
   p_Iwalker.ProcessNext(pInfo2);
   stack2.Push(pInfo2);
   }
  }

 stack = stack2;
} while(stack.Count > 0)
Re: C# goto, нужно ли избегать
От: vmpire Россия  
Дата: 14.04.11 14:06
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Если можете предложить лучшее решение — предлагайте.

У выс тут два вопроса:
— можно ли предложить лучшее решение
— нужно ли избегать goto

Ответ на первый вопрос — да, можно. Выше уже предложили.
Ответ на второй — лучше избегать, если это не влечёт больших накладных расходов.
Технически без Goto можно написать всегда. Но иногда (очень редко) с goto получается сильно понятнее.
В современных языках для наиболее частых случаев применения goto придумали специализированные операторы (continue, break). Они обладают теми же недостатками, что goto, но эти недостатки в них смягчены тем, что по причине чётко определённой семантики они меньше вводят в заблуждение.

Пример случая, где goto на мой взгляд уместен — несколько вложенных циклов, внутри самого внутреннего проверяется какое-то условие, по которому должен быть выход из всех циклов сразу. Конечно, можно выделить эти циклы в отдельную функцию и сделать return из середины, но чем это лучше goto?
Re[2]: C# goto, нужно ли избегать
От: Sorc17 Россия  
Дата: 14.04.11 14:35
Оценка:
Здравствуйте, vmpire, Вы писали:

V>Пример случая, где goto на мой взгляд уместен — несколько вложенных циклов, внутри самого внутреннего проверяется какое-то условие, по которому должен быть выход из всех циклов сразу. Конечно, можно выделить эти циклы в отдельную функцию и сделать return из середины, но чем это лучше goto?


А вот в Java его по другому и нельзя использовать. Не скомпилится. Что, в C# не скопировали эту блестящую идею? Странно.
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
Re: C# goto, нужно ли избегать
От: WolfHound  
Дата: 14.04.11 15:03
Оценка: 2 (2) +1 -7 :)
Здравствуйте, Философ, Вы писали:

Ф>Если можете предложить лучшее решение — предлагайте.

Можем. Но не на C#. Ибо он тупой очень.
def process(stack, stack2)
{
    while (stack.Count > 0)
    {
        def pInfo = stack.Pop();
        count = CEntity.GetRelatedEntitiesProperties(pInfo.PropertyType, out api);
        foreach (pInfo2 in api)
        {
            p_Iwalker.ProcessNext(pInfo2);
            stack2.Push(pInfo2);
        }
    }
    when (stack2.Count > 0)
        process(stack2, stack);//Хвостовые вызовы стек не кушают.
}
process(stack, Stack());

А то что остальные напредлагали это и есть спагетти. Хотя они сами этого еще не понимают.
А вообще нужно озвучить всю задачу.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: C# goto, нужно ли избегать
От: vmpire Россия  
Дата: 14.04.11 15:21
Оценка:
Здравствуйте, Sorc17, Вы писали:

V>>Пример случая, где goto на мой взгляд уместен — несколько вложенных циклов, внутри самого внутреннего проверяется какое-то условие, по которому должен быть выход из всех циклов сразу. Конечно, можно выделить эти циклы в отдельную функцию и сделать return из середины, но чем это лучше goto?


S>А вот в Java его по другому и нельзя использовать. Не скомпилится. Что, в C# не скопировали эту блестящую идею? Странно.

У Вас отличная логика: спросить, предположить, что ответ положительный и удивиться ему
В C# можно переходить на метку можно только из скопа её действия, то есть из блока наружу (но не наружнее, чем стоит метка), но не внутрь.
Насколько я понимаю, это так же, как в Java или очень похоже.
Re: C# goto, нужно ли избегать
От: Abyx Россия  
Дата: 14.04.11 15:29
Оценка:
шаг 1
       {
        second:
            count = ...(stack, stack2);
            if (stack2.Count > 0)
            {
                swap(ref stack, ref stack2);
                goto second;
            }
       }


шаг 2
       for(;;)
       {
            count = ...(stack, stack2);

            if(stack2.Count == 0)
                return;

            swap(ref stack, ref stack2);
       }
In Zen We Trust
Re[2]: C# goto, нужно ли избегать
От: WolfHound  
Дата: 14.04.11 16:08
Оценка:
Здравствуйте, WolfHound, Вы писали:

Мне интересно с каким из озвученных фактов не согласны минусующие?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: C# goto, нужно ли избегать
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.04.11 16:14
Оценка:
Здравствуйте, vmpire, Вы писали:

V>Технически без Goto можно написать всегда. Но иногда (очень редко) с goto получается сильно понятнее.


В этом умозаключении неявно фигурирует язык на котором у тебя возникают проблемы.

Я знаю как минимум 5 языков в которых вообще нет goto и не возникает никаких проблем по этому поводу.

Так что то что ты думаешь, что что-то знаешь — это от незнания . Освой любой язык претендующий на звание "функциональный" и ты тотчас же изменишь свое мнение.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: C# goto, нужно ли избегать
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.04.11 16:25
Оценка: 14 (5) +2 -1
Здравствуйте, Философ, Вы писали:

Ф>Если можете предложить лучшее решение — предлагайте.


Ф>
Ф>            Stack<PropertyInfo> stack2 = new Stack<PropertyInfo>();
Ф>            second:
Ф>            while (stack.Count > 0)
Ф>            {
Ф>                PropertyInfo pInfo = stack.Pop();
Ф>                count = CEntity.GetRelatedEntitiesProperties(pInfo.PropertyType, out api);

Ф>                foreach (PropertyInfo pInfo2 in api)
Ф>                {
Ф>                    p_Iwalker.ProcessNext(pInfo2);
Ф>                    stack2.Push(pInfo2);
Ф>                }
Ф>            }
Ф>            if (stack2.Count > 0)
Ф>            {
Ф>                //меняем местами стэки
Ф>                Stack<PropertyInfo> stackTmp = stack;
Ф>                stack = stack2;
Ф>                stack2 = stackTmp;
Ф>                goto second;
Ф>            }
Ф>


Мне казалось, что вопрос с goto был закрыт много лет назад вот этим вот шедевром
Автор: IT
Дата: 08.06.02
народного творчества IT. Ан, нет.

Я не буду приводить примера того как этот код можно было бы переписать без goto. Я просто скажу что твой код — говно. Или как его любят называть в народе — говнокод. Читать его сложно и уныло.

Лучшим решением было бы не пытаться устранить в этом говнокоде goto, а попытаться описать задачу на естественно языке и подумать как ее лучше всего решить не доводя код до состояния говнокода.

За долгие годы программирования я для себя вывел формулу написания хорошего кода — надо писать код думая о том как ты будешь объяснять его окружающим. Оптималным вариантом является описание кода в статье (блоге, сообщении на форуме в скайпе, ...). Как только ты начинаешь думать о том как описать свой код словами, так тот час же понимаешь, что проще переписать код более очевидным образом, нежели пытаться описать некачественный код.

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

В общем, не борись с goto. Борись за понятность кода. Начни с того, что приведи здесь внятно описание задачи на естественном (русском) языке.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: C# goto, нужно ли избегать
От: vmpire Россия  
Дата: 14.04.11 17:45
Оценка: +1
Здравствуйте, VladD2, Вы писали:

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

V>>Технически без Goto можно написать всегда. Но иногда (очень редко) с goto получается сильно понятнее.
VD>В этом умозаключении неявно фигурирует язык на котором у тебя возникают проблемы.
Этот язык явно фигурирует в названии топика

VD>Я знаю как минимум 5 языков в которых вообще нет goto и не возникает никаких проблем по этому поводу.

Я тоже знаю намного больше одного языка, смысла заниматься фаллометрией не вижу.
С goto у меня проблем не возникает, в проектах использовать не приходилось ни разу, за исключением версий break/continue и языков, где без него нельзя никак.

VD>Так что то что ты думаешь, что что-то знаешь — это от незнания .

Это ты думаешь, что знаешь, что я думаю. Но это, как ты сам сказал, от незнания

VD>Освой любой язык претендующий на звание "функциональный" и ты тотчас же изменишь свое мнение.

Изменю мнение о том, что в C# бывают случаи, когда goto оправдан? Как C# связан с функциональными языками?
Вы действительно считаете, что отсутствие goto в одних языках это довод за то, что он не нужен и в других? Тогда вот вам контрпример: напишите, пожалуйста, что-нибудь без goto на ассемблере.
Re[3]: C# goto, нужно ли избегать
От: vmpire Россия  
Дата: 14.04.11 17:47
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Мне интересно с каким из озвученных фактов не согласны минусующие?

С понятием "тупой язык" и неявным утверждением, что на C# показанный способ невозможен
Re[4]: C# goto, нужно ли избегать
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.04.11 17:56
Оценка:
Здравствуйте, vmpire, Вы писали:

VD>>В этом умозаключении неявно фигурирует язык на котором у тебя возникают проблемы.

V>Этот язык явно фигурирует в названии топика

Сори. Как-то в шапку я забыл второй раз заглянуть когда читал само сообщение. Однако же даже в рамках C# понятнее от наличия goto ни разу еще не становилось. Если нужны goto, то стоит подумать над более детальным продумыванием алгоритма.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: C# goto, нужно ли избегать
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.04.11 18:05
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Мне интересно с каким из озвученных фактов не согласны минусующие?


А почему сразу несогласны? Просто больно людям за бесцельно прожитые дни (с).

Если серьезно, то ты не прав, конечно. Язык не тупой (есть множество тупее). Он просто не очень удобный. В данном случае он просто провоцирует на говнокод. Но это свойство любого приемущественно императивного языка. В том числе Явы, С++, С, Паскаля и т.п.

Когда ты мыслишь циклами, то вопрос входа и выхода из двух вложенных циклов возникает сам собой. Это вопрос времени.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: C# goto, нужно ли избегать
От: WolfHound  
Дата: 14.04.11 18:07
Оценка:
Здравствуйте, vmpire, Вы писали:

V>С понятием "тупой язык" и неявным утверждением, что на C# показанный способ невозможен

Ну тебе и флаг в руки. Перепиши на C#.
Вот только там нет ни локальных функций ни оптимизации хвостовой рекурсии.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: C# goto, нужно ли избегать
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.04.11 18:07
Оценка: +1 :)
Здравствуйте, VladD2, Вы писали:

Мне кажется надо подкрутить движок сайта... чтобы минус от minorlogic (полученный вне форума С++) заменялся бы на 3, нет, 5 плюсов!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: C# goto, нужно ли избегать
От: night beast СССР  
Дата: 14.04.11 18:22
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Мне кажется надо подкрутить движок сайта... чтобы минус от minorlogic (полученный вне форума С++) заменялся бы на 3, нет, 5 плюсов!


это называется административный ресурс, да?
Re[4]: C# goto, нужно ли избегать
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.04.11 18:25
Оценка:
Здравствуйте, night beast, Вы писали:

VD>>Мне кажется надо подкрутить движок сайта... чтобы минус от minorlogic (полученный вне форума С++) заменялся бы на 3, нет, 5 плюсов!


NB>это называется административный ресурс, да?

NB>

Ну, просвещенная Европа называет это термином "справедливость" .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: C# goto, нужно ли избегать
От: night beast СССР  
Дата: 14.04.11 18:36
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>>>Мне кажется надо подкрутить движок сайта... чтобы минус от minorlogic (полученный вне форума С++) заменялся бы на 3, нет, 5 плюсов!


NB>>это называется административный ресурс, да?

NB>>

VD>Ну, просвещенная Европа называет это термином "справедливость" .


скорее "демократия". справедливость -- это наш, российский термин.
Re[4]: C# goto, нужно ли избегать
От: WolfHound  
Дата: 14.04.11 19:04
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Если серьезно, то ты не прав, конечно. Язык не тупой (есть множество тупее).

Наличие более тупых языков не отменяет того факта что данный язык туп.

VD>Он просто не очень удобный. В данном случае он просто провоцирует на говнокод. Но это свойство любого приемущественно императивного языка. В том числе Явы, С++, С, Паскаля и т.п.

Так они все тупые.
Тут все просто. Чем чаще язык провоцирует на говнокод тем он тупее.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: C# goto, нужно ли избегать
От: Философ Ад http://vk.com/id10256428
Дата: 14.04.11 19:04
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Философ, Вы писали:


Ф>>Если можете предложить лучшее решение — предлагайте.



VD>Мне казалось, что вопрос с goto был закрыт..

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


VD>Я не буду приводить примера того как этот код можно было бы переписать без goto. Я просто скажу что твой код — говно. Или как его любят называть в народе — говнокод.


Только из-за goto? Вероятно так же из-за того, что определена "count", которая сейчас не используется. Что ещё?

VD>Читать его сложно и уныло.

Там вроде нечего читать. Кода тут кот наплакал.


VD>устранить в этом говнокоде goto

Это не продакшн код, скорее "отрывочные мысли на черновике".

VD>За долгие годы программирования я для себя вывел формулу написания хорошего кода — надо писать код думая о том как ты будешь объяснять его окружающим.

Мне никогда не пиходилось описывать окружающим отдельные функции или методы. А вот рассказывать зачем этот метод/функция/класс нужен(а), почему он(а) был(а) написан(а), а в худшем случае "что именно оно делает".

VD>Отличным подспорьем в написании понятного кода является изучение функционального подхода.

Может быть когда-нибудь я засяду за "функциональщину", однако особого смысла в этом не вижу.

VD>В общем, не борись с goto.

Следует ли это понимать, что можно не подчищать прототипы?

VD>Начни с того, что приведи здесь внятно описание задачи на естественном (русском) языке.

Здесь был приведён отрывок метода, обходящего дерево, составленное из класса CEntity. Это очередной ORM, и обход дерева нужен для генерации предложения select.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[3]: C# goto, нужно ли избегать
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.04.11 22:03
Оценка: +3
Здравствуйте, Философ, Вы писали:

VD>>Я не буду приводить примера того как этот код можно было бы переписать без goto. Я просто скажу что твой код — говно. Или как его любят называть в народе — говнокод.


Ф>Только из-за goto?


Нет. Главное не то, что есть в коде, а того что в нем нет. В нем не видно ясной мысли.

Ф>Вероятно так же из-за того, что определена "count", которая сейчас не используется. Что ещё?


Это детали, хотя и нехороши.

VD>>Читать его сложно и уныло.

Ф>Там вроде нечего читать. Кода тут кот наплакал.

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

VD>>За долгие годы программирования я для себя вывел формулу написания хорошего кода — надо писать код думая о том как ты будешь объяснять его окружающим.

Ф>Мне никогда не пиходилось описывать окружающим отдельные функции или методы.

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

Ф>А вот рассказывать зачем этот метод/функция/класс нужен(а), почему он(а) был(а) написан(а), а в худшем случае "что именно оно делает".


А у тебя не было ощущения, что структура классов тебе более менее нравится, а код отдельных методов вызывает тошноту?

VD>>Отличным подспорьем в написании понятного кода является изучение функционального подхода.

Ф>Может быть когда-нибудь я засяду за "функциональщину", однако особого смысла в этом не вижу.

Ты не ищи смысл. Знания и опыт штуки такие... не ясно зачем они нужны пока их нет. А когда есть, то и вопросов не возникает.

Я сам не так давно освоил ФП. Раньше не понимал как жить без breake. Теперь зачастую бывает так что в программе нет ни одного return-а. И код от этого только понятнее становится.

VD>>В общем, не борись с goto.

Ф>Следует ли это понимать, что можно не подчищать прототипы?

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

VD>>Начни с того, что приведи здесь внятно описание задачи на естественном (русском) языке.

Ф>Здесь был приведён отрывок метода, обходящего дерево, составленное из класса CEntity. Это очередной ORM, и обход дерева нужен для генерации предложения select.

Тогда я тебя удивлю. В этой задаче не только goto не нужен, но и циклы.

Такие задачи решаются двумя способами:
1. Созданием рекурсивной фунции обходящей дерево. При этом конкретный алгоритм можно передавать в виде ссылки на функцию.
2. Созданием итератором разворачивающим перебор дерева в последвовательность. И затем, перебором последовательности в одном единственном foreach.

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

В прочем, сама задача — создание ОРМ-ов сама по себе неблагодарная. Ее уже сто раз решали. Лучше взять одно из решений и допилить напильником.

Лично я прдерживаюсь мнения, что данные в БД имеют не объектную природу и стало быть работать с ними в объектном стиле не следует. По сему нужно взять легкий ОРМ вроде BLToolkit-а и писать логику обработки данных.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: C# goto, нужно ли избегать
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.04.11 22:05
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

WH>Наличие более тупых языков не отменяет того факта что данный язык туп.


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

VD>>Он просто не очень удобный. В данном случае он просто провоцирует на говнокод. Но это свойство любого приемущественно императивного языка. В том числе Явы, С++, С, Паскаля и т.п.

WH>Так они все тупые.
WH>Тут все просто. Чем чаще язык провоцирует на говнокод тем он тупее.

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

Например, в этой задаче — объход дерева — и на Шарпе можно было бы создать итератор или ФВП и с их помощью написать код чисто и красиво.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: C# goto, нужно ли избегать
От: Sinix  
Дата: 15.04.11 00:10
Оценка: 2 (2) +1
Здравствуйте, WolfHound, Вы писали:

WH>Тут все просто. Чем чаще язык провоцирует на говнокод тем он тупее.

А можно с троллингом в КСВ?

Блин, почему в любую тему вечно влазят фанаты-маргиналы (без обид) и начинают доказывать окружающим, что у них длиннее они знают, как лучше? Почему этим не занимаются васиководы? Почему сишники и яваисты спокойно занимаются своим делом и троллят в профильной ветке, не засирая всё окружающее? Вот нафига так делать?

Неужели не очевидно, какая будет ответная реакция?
Re[6]: C# goto, нужно ли избегать
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.04.11 00:22
Оценка:
Здравствуйте, Sinix, Вы писали:

WH>>Тут все просто. Чем чаще язык провоцирует на говнокод тем он тупее.

S>А можно с троллингом в КСВ?

Уверен, что он не торллит, а реально так думает. Просто он очень категоричен и резок на высказывания. Однако, если "тупее" заменить на "хуже" или "ниже уровнем", то я, пожалуй, соглашусь.

S>Блин, почему в любую тему вечно влазят фанаты-маргиналы (без обид)и начинают доказывать окружающим, что у них длиннее они знают, как лучше?


Блин, почему в любую тему вечно влазят фанаты-говнокодерв (без обид) и начинают доказывать окружающим, что у них длиннее они знают, как лучше?

S>Почему этим не занимаются васиководы?


Может потому что в теме не секут?

S>Почему сишники и яваисты спокойно занимаются своим делом и троллят в профильной ветке, не засирая всё окружающее? Вот нафига так делать?


А ты себя то к кому причисляешь? Вот WolfHound писал (а может и пишет сейчас) на С++ не мало лет. Писал он и на C#. Мне это достоверно известно. За васик не скажу, но он в последних версиях мало чем от шарпа отличается, так что можно и его зачесть.

Думаешь почему WolfHound не причисляет себя к сиплюсплюсниками или шарпистам?

S>Неужели не очевидно, какая будет ответная реакция?


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

Так что ты это... Если хочешь чтобы с тобой разговаривали уважительно, и сам веди разговор уважительно.

WolfHound твою маргинальность твоей личность не обсуждал. Вот и ты обсуждай его высказывания, а не его самого. Не согласен с ним? Докажи на примере.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: C# goto, нужно ли избегать
От: Sinix  
Дата: 15.04.11 01:02
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Уверен, что он не торллит, а реально так думает. Просто он очень категоричен и резок на высказывания. Однако, если "тупее" заменить на "хуже" или "ниже уровнем", то я, пожалуй, соглашусь.

Так я не спорю, немерл весьма продвинут по фичам. Лучше/хуже утверждать не буду, это слишком индивидуальное дело. Раздражает не превосходство убер-технологии, раздражает агрессивность большинства евангелистов и позиция "ты не с нами — ты говно". Причём, как правило, даже без попытки разобраться в проблемах того, кому "помогают".

VD>Блин, почему в любую тему вечно влазят фанаты-говнокодерв (без обид) и начинают доказывать окружающим, что у них длиннее они знают, как лучше?

А можно примеры? Я вот постоянных тролль-говнокодеров не припомню, а примеров когда интересная сначала тема скатывалась в разборки lin vs win / mac vs все / nemerle vs говнокодеры можно набрать десятки. И, поскольку действующие лица всё те же, интереса читать одни и те же набросы по пятому кругу никакого нет.

S>>Почему этим не занимаются васиководы?

VD>Может потому что в теме не секут?
Ну, уж в Васике они разбираются наверно? А разбираться в теме, против которой воюешь, наоборот, вредно — тяжелее пропускать мимо ушей аргументы

VD>А ты себя то к кому причисляешь?

А вот хз. По работе — дотнет + MS SQL. По необходимости — что угодно, начиная с правки старого vba-софта и заканчивая сеткой под ключ. Хоть качество и будет, мнэээ... фиговато Грабли, в основном, не в инструменте, а в руках.

VD>Думаешь почему WolfHound не причисляет себя к сиплюсплюсниками или шарпистам?



S>>Неужели не очевидно, какая будет ответная реакция?

VD>Ну, это зависит от человека. Если он неадекватен, то неадекватная реакция может быть и на вполне безобидные высказывания.
Не, просто в ответ на агрессивное "всё, что вы делаете — отстой" конструктива заведомо не будет. Так же, как с сетевыми продавцами и прочими свидетелями иеговы.
Re[8]: C# goto, нужно ли избегать
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.04.11 03:18
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Так я не спорю, немерл весьма продвинут по фичам.


В данном случае вместо немерла мог выступать любой ФЯ. Например, F#.

S>Лучше/хуже утверждать не буду, это слишком индивидуальное дело. Раздражает не превосходство убер-технологии, раздражает агрессивность большинства евангелистов и позиция "ты не с нами — ты говно".


Из каких его слов проистекает твой вывод?
Человек показал правильный, с его точки зрения, подход на языке который он знает. Скажи спасибо, что этот язык так похож на те что ты знаешь. Другой бы мог задвинуть пример на Хаскеле (сразу оговариваюсь... против Хаскелея ничего не имею)

S>Причём, как правило, даже без попытки разобраться в проблемах того, кому "помогают".


В чем не разобрался WolfHound? И как должен был выглядеть его ответ, если бы он разобрался бы?

VD>>Блин, почему в любую тему вечно влазят фанаты-говнокодерв (без обид) и начинают доказывать окружающим, что у них длиннее они знают, как лучше?

S>А можно примеры?

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

Твои слова не более чем гнилой, необоснованный наезд.

WolfHound показал то как он видит решение проблемы. Показал на том языке который хорошо знает. То что используемый в его ответе язык вызвал у тебя дискомфорт никто кроме тебя не виноват.

S>а примеров когда интересная сначала тема скатывалась в разборки lin vs win / mac vs все / nemerle vs говнокодеры можно набрать десятки.


Ну, так погляди чем ты занимаешься? Ты именно что скатываешь тему в этом неприличном направлении.

S>>>Почему этим не занимаются васиководы?

VD>>Может потому что в теме не секут?
S>Ну, уж в Васике они разбираются наверно?

Не могу за всех ответить. Но к теме это вряд ли относится.

S>А разбираться в теме, против которой воюешь, наоборот, вредно — тяжелее пропускать мимо ушей аргументы


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

VD>>Думаешь почему WolfHound не причисляет себя к сиплюсплюсниками или шарпистам?

S>

Он знает все эти языки и потому не принадлежит к одному лагерю. Примеры же он дает на том языке который, в данном случае, позволят ему продемонстрировать более правильный подход. К сожалению, ни С++ ни C# необходимых возможностей не предоставляет.

Мне вот интересно, стало бы тебе легче если бы WolfHound привел бы пример на F#?

S>>>Неужели не очевидно, какая будет ответная реакция?

VD>>Ну, это зависит от человека. Если он неадекватен, то неадекватная реакция может быть и на вполне безобидные высказывания.
S>Не, просто в ответ на агрессивное "всё, что вы делаете — отстой" конструктива заведомо не будет. Так же, как с сетевыми продавцами и прочими свидетелями иеговы.

Агрессивный тут в основном ты. Про "вас всех" я тоже не слышал высказываний.
WolfHound назвал C# тупым языком. Казалось бы что с того, если ты не ассоциируешь язык с собой? К тому же это же язык! У него мозга нет. Так что тупым или остроумным он в принципе быть не может.

В общем, попробуй проигнорировать резкое высказывание и попытаться понять основной смысл сообщения WolfHound-а. В нем несомненно скрывается рациональное зерно. Рекурсивные функции действительно зачастую отлично заменяют циклы и могут спасать от необходимости использования как goto, так и break, continue и даже return.
Поверь — это полезная информация.

Ну, а осознав это ты, возможно, сможешь понять и резкость высказываний WolfHound-а.
Я периодически пишу на C# и частенько замечаю, что этот язык подталкивает меня на более грязное программирование.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: C# goto, нужно ли избегать
От: Sinix  
Дата: 15.04.11 04:37
Оценка: +2
Здравствуйте, VladD2, Вы писали:

VD>В данном случае вместо немерла мог выступать любой ФЯ. Например, F#.

Угу. Но, повторюсь, орды хаскеллистов не набегают в каждый топик и не пиарят хаскель путём опускания всех окружающих.

S>>Лучше/хуже утверждать не буду, это слишком индивидуальное дело. Раздражает не превосходство убер-технологии, раздражает агрессивность большинства евангелистов и позиция "ты не с нами — ты говно".


VD>Из каких его слов проистекает твой вывод?

Так это неоднократно повторяется. Даже этот флейм начался с наброса

Но не на C#. Ибо он тупой очень.

Кроме того, я не собирался обвинять в агрессивной пропаганде исключительно немерлистов и, тем более, исключительно ув WolfHound. Если он воспринял мой первый пост как личный наезд, то очевидно, мне стоило вставить этот дисклаймер раньше. Неправ.

VD>Человек показал правильный, с его точки зрения, подход на языке который он знает. Скажи спасибо, что этот язык так похож на те что ты знаешь. Другой бы мог задвинуть пример на Хаскеле (сразу оговариваюсь... против Хаскелея ничего не имею)

Хмм... а что в хаскелле такого непонятного? Первоначально мозг ломается конеш, но потом особых вопросов не возникает вроде. Поскольку сам ничего серьёзного не писал, только переводил код, могу быть неправ.

S>>Причём, как правило, даже без попытки разобраться в проблемах того, кому "помогают".

VD>В чем не разобрался WolfHound? И как должен был выглядеть его ответ, если бы он разобрался бы?
См дисклаймер выше, я не собирался наезжать лично на WolfHound-а.

VD>Я вообще-то показал тебе, что твои слова можно легким движением руки развернуть против тебя.

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

VD>WolfHound показал то как он видит решение проблемы. Показал на том языке который хорошо знает. То что используемый в его ответе язык вызвал у тебя дискомфорт никто кроме тебя не виноват.


И в сотый раз я повторю, проблема — не в используемом инструменте, а в том, что он постоянно насильно пиарится, по поводу и без. В результате, каким бы крутым не был немерл/лин/мак/подставить нужное, каждый наброс закономерно оканчивается виртуальным переплёвыванием. Почему нельзя просто закинуть сампл и по возможности объяснить преимущества для товарища топикстартера? Зачем становиться в позу д'Артаньяна и опускать начинающего человека? Самоутверждение?

VD>Ну, так погляди чем ты занимаешься? Ты именно что скатываешь тему в этом неприличном направлении.

Ххех, т.е

Но не на C#. Ибо он тупой очень.
...
о что ты думаешь, что что-то знаешь — это от незнания
...
твой код — говно
...
они все тупые

— это конструктив?


VD>Судя по тому какой дискомфорт тебе причиняет упоминание немерла (точнее даже не упоминание, а использование в примерах), похоже что ты именно по описанному тобой шаблону и действуешь. Может разумнее не раздражаться, а попробовать прислушаться к словам?

Не, ну вот зачем наезжать? Плиз покажите хоть один пост, где я целенаправленно опускаю не только немерл — вообще любой язык.
Вот это
Автор: Sinix
Дата: 15.02.11

Немерл будет лаконичней, тут и спорить не о чем, но в продакшн в качестве основного языка я его не потащу, точно так же как f# и прочую эзотерику: мало ресурсов, малое community, никакого тулчайна. Для всякой вспомогательной мелочёвки — никаких проблем, но пока не припёрло.
...
Мдя, я предполагал, что будет короче и понятней, но не настолько же! Шикарно и спасибо

очевидно, крайнее раздражение?

Предлагаю закруглиться, тема действительно ушла не туда. Удачи!
Re[5]: C# goto, нужно ли избегать
От: Undying Россия  
Дата: 15.04.11 04:50
Оценка: 1 (1) :)
Здравствуйте, WolfHound, Вы писали:

WH>Ну тебе и флаг в руки. Перепиши на C#.


И в чем проблема? Анонимные делегаты в шарпе уже пять лет как имеются.

WH>Вот только там нет ни локальных функций ни оптимизации хвостовой рекурсии.


Зачем нерекурсивную задачу записывать в виде рекурсии? Наличие хвостовой рекурсии в решении как правило означает, что рекурсия для решения задачи нафиг не нужна.

зы
Приведенный тобой код, кстати, зело кошмарен, т.к. по нему совершенно не видно, что является результатом выполнения этого куска кода.
Re[6]: C# goto, нужно ли избегать
От: hardcase Пират http://nemerle.org
Дата: 15.04.11 05:00
Оценка:
Здравствуйте, Undying, Вы писали:

WH>>Вот только там нет ни локальных функций ни оптимизации хвостовой рекурсии.


U>Зачем нерекурсивную задачу записывать в виде рекурсии? Наличие хвостовой рекурсии в решении как правило означает, что рекурсия для решения задачи нафиг не нужна.


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

U>зы

U>Приведенный тобой код, кстати, зело кошмарен, т.к. по нему совершенно не видно, что является результатом выполнения этого куска кода.

А что является результатом выполнения приведенного кода ТС-а?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: C# goto, нужно ли избегать
От: WolfHound  
Дата: 15.04.11 07:05
Оценка:
Здравствуйте, Undying, Вы писали:

U>И в чем проблема? Анонимные делегаты в шарпе уже пять лет как имеются.

Вот только они весь стек съедят.

U>Зачем нерекурсивную задачу записывать в виде рекурсии? Наличие хвостовой рекурсии в решении как правило означает, что рекурсия для решения задачи нафиг не нужна.

Вот только с рекурсиейй почемуто получилось короче чем без рекурсии.
И понятно что происходит. В отличии от той лапши которую тут предлагали.
Ты посмотри что народ творит. Они все как один вводят новый цикл только для того чтобы сделать break.
Код с goto и то понятнее в данном случае.

U>Приведенный тобой код, кстати, зело кошмарен, т.к. по нему совершенно не видно, что является результатом выполнения этого куска кода.

А что по коду в топиккастера понятно?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: C# goto, нужно ли избегать
От: WolfHound  
Дата: 15.04.11 07:05
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>Ты как всегда излишне категоричен.

Я как всегда придельно честен и называю вещи своими именами.

VD>Если довести твои мысли до логического конца, то все существующие языки тупы, так как всегда можно придумать более продвинутый язык.

Именно так я и думаю.
Тупняки немерла меня тоже порой раздражают. Но тупит он заметно меньше чем C#.

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

Игра словами мне не интерасна.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: C# goto, нужно ли избегать
От: Klapaucius  
Дата: 15.04.11 08:00
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Здесь был приведён отрывок метода, обходящего дерево, составленное из класса CEntity. Это очередной ORM, и обход дерева нужен для генерации предложения select.


А, обход дерева? В нормальных языках можно обойтись без goto.
Дописываем после определения типа дерева:
deriving (Functor, Foldable, Traversable)

Или, если тип (Tree) определен не в нашем коде:
deriving instance Functor Tree
deriving instance Foldable Tree
deriving instance Traversable Tree

Все, обход дерева готов.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[2]: C# goto, нужно ли избегать
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 15.04.11 08:18
Оценка: 1 (1)
Здравствуйте, andyag, Вы писали:

Так это просто трюк, который имитирует goto, только больше букв и отступов
Re[7]: C# goto, нужно ли избегать
От: Undying Россия  
Дата: 15.04.11 08:24
Оценка: 1 (1) -1
Здравствуйте, WolfHound, Вы писали:

U>>И в чем проблема? Анонимные делегаты в шарпе уже пять лет как имеются.

WH>Вот только они весь стек съедят.

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

U>>Приведенный тобой код, кстати, зело кошмарен, т.к. по нему совершенно не видно, что является результатом выполнения этого куска кода.

WH>А что по коду в топиккастера понятно?

Твой код ничем не лучше кода топикстартера или варианта с while, такая же непонятная муть.
Re: C# goto, нужно ли избегать
От: Undying Россия  
Дата: 15.04.11 08:49
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Если можете предложить лучшее решение — предлагайте.


Порядок обработки объектов одного уровня в дереве имеет значение или в алгоритме такой порядок случайно получился?
Re[2]: C# goto, нужно ли избегать
От: Undying Россия  
Дата: 15.04.11 08:54
Оценка: :)
Здравствуйте, Undying, Вы писали:

U>Порядок обработки объектов одного уровня в дереве имеет значение или в алгоритме такой порядок случайно получился?


Если ответ — нет, не имеет, то ты мегашаман, т.к. задача решается с помощью одной очереди и одного while.
Re[7]: C# goto, нужно ли избегать
От: Undying Россия  
Дата: 15.04.11 09:00
Оценка:
Здравствуйте, WolfHound, Вы писали:

U>>Приведенный тобой код, кстати, зело кошмарен, т.к. по нему совершенно не видно, что является результатом выполнения этого куска кода.

WH>А что по коду в топиккастера понятно?

Объясню, почему твой код столь же плох как код топикстартера.

Код топикстартера плох по трем причинам:

1) В нем есть переиспользовании переменных ради экономии на спичках (stack детей по смыслу задачи должен пересоздаваться).
2) Непонятно является ли обратный порядок обхода детей важным по условию задачи или таким он получился случайно.
3) Код обхода дерева смешан с кодом обработки элементов.

В твоем коде все эти проблемы остались, поэтому твой код ничем не лучше.
Re[2]: C# goto, нужно ли избегать
От: Философ Ад http://vk.com/id10256428
Дата: 15.04.11 09:00
Оценка:
Здравствуйте, Undying, Вы писали:

U>Порядок обработки объектов одного уровня в дереве имеет значение или в алгоритме такой порядок случайно получился?


Я ещё не родил конечного алгоритма (меня тут немного заклинило). Когда это писалось, то думал, что имеет, поэтому ответ, наверное да.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[3]: C# goto, нужно ли избегать
От: Abyx Россия  
Дата: 15.04.11 09:25
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Мне интересно с каким из озвученных фактов не согласны минусующие?


С тем что C# тупой язык; с тем что вы не можете написать хороший код на C# потому что C# тупой язык.

C# нормальный язык. Не хуже и не лучше других. Алгоритмы они вообще во всех языках выглядят примерно одинаково, а то что где-то есть хвостовая рекурсия, замыкания, генераторы, сопрограммы, и другие редкие фичи не делает язык "умнее". Применение хитрых вещей не повышает читабельность. В данном случае, применение хвостовой рекурсии требует того чтобы читающий проверил что там действительно хвостовая рекурсия.

Алсо, у ТСа есть проблема, и ему надо ее решить. В вопросе есть слово "С#" и по всей видимости это значит что ТСу надо решение на C#. Ваше стремление показать что вы знаете другие языки кроме C#, никоим образом не решает проблему ТСа.

Кроме того, ваша функция слишком большая, имеет неинформативное название, делает слишком много, не должна компилироваться вообще из за неиспользуемых переменных (хз как там у немерла, а у меня на C++ такое бы не скомпилировалось), допускает что count может быть <= 0.

Вот за эти понты вкупе с дурно пахнущим кодом, я поставил вам -1.
In Zen We Trust
Re[8]: C# goto, нужно ли избегать
От: WolfHound  
Дата: 15.04.11 09:26
Оценка: +1
Здравствуйте, Undying, Вы писали:

U>В этой задаче не съедят, т.к. тут вообще рекурсия не нужна.

А как по мне так это циклы не нужны.

U>А там где рекурсия нужна действительно, там хвостовая рекурсия не помощник.

А как на счет случаев когда одна и таже функция может вызываться хвостовым и не хвостовым образом?
Вот например:
      def optimize(r : Rule)
      {
        | Not(Not(rule))                => optimize(Rule.And(r.Location, rule))
        | And(Not(rule))                => optimize(Rule.Not(r.Location, rule))
        | Not(And(rule))                => optimize(Rule.Not(r.Location, rule))
        | And(And(rule))                => optimize(Rule.And(r.Location, rule))
        | Not(rule)                     => Rule.Not(r.Location, optimize(rule))
        | And(rule)                     => Rule.And(r.Location, optimize(rule))

Тут есть и те и другие вызовы.
Или можно вспомнить про qsort. Там тоже один рекурсивный вызов хвостовой, а другой нет.

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

U>Твой код ничем не лучше кода топикстартера или варианта с while, такая же непонятная муть.

Лучше. Я явно выделил обработку.
А для того чтобы сделать хороший код этого куска не достаточно. Нужно знать всю задачу. И решать ее по хорошему.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[4]: C# goto, нужно ли избегать
От: WolfHound  
Дата: 15.04.11 09:44
Оценка: +2
Здравствуйте, Abyx, Вы писали:

A>C# нормальный язык. Не хуже и не лучше других.

Рассказывай это тем кто других языков не видел.

A>Алгоритмы они вообще во всех языках выглядят примерно одинаково, а то что где-то есть хвостовая рекурсия, замыкания, генераторы, сопрограммы, и другие редкие фичи не делает язык "умнее".

Ага конечно.
https://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/peg-parser/Nemerle.Peg.Macros/Optimizer/Optimizer.OptimizeRule.n?r=9596
Удачи с переписывание этого на C#. Как минимум 5 кратное разбухание кода гарантировано.

A>Применение хитрых вещей не повышает читабельность. В данном случае, применение хвостовой рекурсии требует того чтобы читающий проверил что там действительно хвостовая рекурсия.

Зачем проверять? Там и так видно что рекурсия хвостовая.

A>Алсо, у ТСа есть проблема, и ему надо ее решить. В вопросе есть слово "С#" и по всей видимости это значит что ТСу надо решение на C#. Ваше стремление показать что вы знаете другие языки кроме C#, никоим образом не решает проблему ТСа.

И задал свой вопрос в философи...

A>Кроме того, ваша функция слишком большая,

8 строк не считая скобочек. Это уже большая функция?

A>имеет неинформативное название,

А какое еще название ей дать если задача не известна?

A>делает слишком много,

Что она делала у топикстартера то и делает.

A>не должна компилироваться вообще из за неиспользуемых переменных (хз как там у немерла, а у меня на C++ такое бы не скомпилировалось), допускает что count может быть <= 0.

Ты свой код то смотрел?
Автор: Abyx
Дата: 14.04.11
Там тот же самый count. Который нигде не объявлен. И с которым то же ничего не делается.

A>Вот за эти понты вкупе с дурно пахнущим кодом, я поставил вам -1.

Весь твой пост это одни сплошные понты.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[4]: C# goto, нужно ли избегать
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.04.11 17:10
Оценка:
Здравствуйте, Abyx, Вы писали:

A>Алсо, у ТСа есть проблема, и ему надо ее решить.


Мне кажется, что его единственная его проблема — это желание обосновать для себя правильность использования goto.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: C# goto, нужно ли избегать
От: fddima  
Дата: 15.04.11 23:01
Оценка:
Здравствуйте, VladD2, Вы писали:

A>>Алсо, у ТСа есть проблема, и ему надо ее решить.

VD>Мне кажется, что его единственная его проблема — это желание обосновать для себя правильность использования goto.
Ну и правильный вопрос. Нормальная практика (на C#) его требует, но лучше без него.
Re[6]: C# goto, нужно ли избегать
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.04.11 10:08
Оценка:
Здравствуйте, fddima, Вы писали:

VD>>Мне кажется, что его единственная его проблема — это желание обосновать для себя правильность использования goto.

F> Ну и правильный вопрос.

Что тут правильного? Раз хочет обоснований, значит и сам сомневается. А в хороших делах обычно не сомневаются.

F> Нормальная практика (на C#) его требует, но лучше без него.


Я написал не мало кода на C#. goto ни разу не потребовался.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: C# goto, нужно ли избегать
От: Undying Россия  
Дата: 23.04.11 13:32
Оценка:
Здравствуйте, WolfHound, Вы писали:

По поводу хвостовой рекурсии я был не прав, поэтому исправляюсь.

U>>И в чем проблема? Анонимные делегаты в шарпе уже пять лет как имеются.

WH>Вот только они весь стек съедят.

Т.е. на запись кода, а, значит, и его читабельность, оптимизация хвостовой рекурсии никак не влияет, это чисто оптимизационная фишка, причем актуальная на достаточно специфических задачах. Соответственно если бы в шарпе такая оптимизация появилась, не ухудшив никаких других качеств языка, то можно было бы сказать, что язык стал чуточку лучше. Ты же заявляешь, что язык без оптимизации хвостовой рекурсии является тупым и на нем вообще писать нельзя, т.е. выдаешь второстепенную фичу за самую важную возможность языка.
Re[8]: C# goto, нужно ли избегать
От: hardcase Пират http://nemerle.org
Дата: 24.04.11 08:41
Оценка:
Здравствуйте, Undying, Вы писали:

U>Ты же заявляешь, что язык без оптимизации хвостовой рекурсии является тупым и на нем вообще писать нельзя, т.е. выдаешь второстепенную фичу за самую важную возможность языка.


Это зависит от архитектуры языка. Для одного языка это — "второстепенная фишка", в другом же — насущная необходимость, без которой ничего вообще работать не будет.
На практике я частенько использую рекурсию в C#, и не сказал бы что в её использовании есть что-то специфическое. Более того, недавно я даже переписывал рекурсивное решение на цикл с рукопашным стеком именно из-за отсутствия такой оптимизации.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: C# goto, нужно ли избегать
От: vdimas Россия  
Дата: 05.05.11 02:42
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я не буду приводить примера того как этот код можно было бы переписать без goto. Я просто скажу что твой код — говно. Или как его любят называть в народе — говнокод. Читать его сложно и уныло.


Ну, от того, что в этом коде появится дополнительная переменная bool canExit или того хуже, бесконечный while(true) {} + break внутри, он краше не станет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.