Си диез / Говнокод #9650 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
private class LinkedAction
{
    public Action<Action<bool>> Action { get; set; }

    public LinkedAction Next { get; set; }

    public void Execute()
    {
        Action(s =>
            {
                if (s && Next != null) Next.Execute();
            });
    }
}

private static LinkedAction NewLinkedAction(LinkedAction link, Action<Action<bool>> action)
{
    return new LinkedAction
    {
        Action = action,
        Next = link
    };
}

var action = GetCopytoTestActions(parameter)
    .Reverse()
    .Aggregate<Action<Action<bool>>, LinkedAction>(null, NewLinkedAction);
action.Execute();

Запостил: abatishchev abatishchev, (Updated )

Комментарии (48) RSS

  • Шарп знаю плохо. Прозреваю что говно тут:
    > .Aggregate<Action<Action<bool>>, LinkedAction>(null, NewLinkedAction);
    Ну и тупорылый метод NewLinkedAction.
    Так?
    Ответить
    • Код читается ужасно (Action<Action<bool>> wtf?). Как я понял, некто создаёт коллекцию неких экшенов и загоняет её в другой экшен, выполняющий переданные экшены по порядку и реализованный в виде односвязного списка (отсюда и реверс).
      Говно, видимо, в том, что вместо того, чтобы написать экшен, принимающий сразу коллекцию экшенов и foreach-ащий их, используются подозрительные подёргивания через reverse и односвязные списки.
      Ответить
      • Ну да.Как мы уже выяснили linq медленее обычного цикла.
        А всё потому что технология модная и суют её где попало.
        Получается шарперы скоро присоединятся к рнршникам и забудут циклы напрочь.
        Ответить
        • Раз уж linq-уют, можно было и через лямбду записать, а не создавать отдельную (достаточно тривиальную) функцию.
          Ответить
          • > linq-уют
            памятуя об одаренности до-диезненьких кодеров, это читается, как уютненький linq
            Ответить
        • Звездеть не надо.

          > Как мы уже выяснили linq медленее обычного цикла
          Если ты про тот недавний замер скорости суммирования массива, здесь на ГК, где обычный for был быстрее linq'а, то там код некорректный: linq и for выполняют разную работу. И выдадут разный результат на других данных.
          Просто мне надоело препираться тут со школотой. Пишут некорректные тесты - ну и хрен с ними.

          И уже неоднократно писалось: linq сделан не для скорости, он сделан для лаконичности исходного кода.
          Там где нужна высокая скорость, следует отказаться от линка и переписать вручную. Всё равно не хватает скорости - переписать на Си. Всё равно не хватает скорости - переписать на асме. Так понятно?

          > А всё потому что технология модная и суют её где попало
          Пусть так. Тебя это волнует? Хочешь об этом поговорить?
          Меня вот почему-то не волнуют школьнеги, пишущие быдлокод. Наоборот, на их фоне я выгодней отличаюсь, и имею с этого профит.

          > Получается шарперы скоро присоединятся к рнршникам и забудут циклы напрочь.
          Забудут - нет. Почти перестанут использовать - да. Язык развивается в сторону функционального программирования, и при наличии фолдов и аггрегаций циклы становятся не нужны.
          Ответить
          • ура! я дождался адекватного камента.

            ЗЫ. имхо сей "КГ" - афигенен. его написал наш архитектор.
            ах как я удачно потролил "шарп знаю плохо но критикую"!
            Ответить
            • >ах как я удачно потролил "шарп знаю плохо но критикую"!
              Мужик, дрочить не пробовал?
              Ответить
          • >linq сделан не для скорости, он сделан для лаконичности исходного кода.
            В приведенном ГК оно совсем нелаконично. Циклом и быстрей и меньше кода.

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

            >Почти перестанут использовать - да. Язык развивается в сторону функционального программирования, и при наличии фолдов и аггрегаций циклы становятся не нужны.
            Правильно. Речь шла именно об этом. И будут использовать linq даже там где написать цикл короче.
            Ответить
            • > В приведенном ГК оно совсем нелаконично.
              В приведенном ГК всего одна строка является линком - Aggregate. Всё остальное линком не является.

              > И будут использовать linq даже там где написать цикл короче.
              Я пай-мальчик, я не люблю ругаться. Но ты вынуждаешь. Ты туп как пробка (ибо троллингом это счесть нельзя).
              Если школота напишет неэффективный код на шарпе, значит и на си эта же школота будет писать неэффективно.
              Ответить
          • как в мире C# всё печально, если приходится сравнивать себя со школьником, чтобы почувствовать собственное превосходство и ощутить прилив гордости.
            Ответить
        • Чтобы ЛИНКохейтеры окончательно поняли, напишу.

          Недавно тут проскакивала ссылка http://www.joelonsoftware.com/articles/fog0000000319.html

          Несложно видеть, что использование стандартных сишных функций работы со строками в ряде случаев ведёт к квадратичному времени. Элементарная конкатенация вызывает пробег по строке каждый раз.
          Так стоит-ли из-за этого совсем отказаться от стандартных функций? Конечно же нет! Когда это не критично - можно и нужно использовать их (как и linq), когда время работы критично, пишем свои функции, заточенные под большое количество конкатенаций (используем циклы вместо линка).

          Надеюсь, донёс мысль?
          Ответить
          • >http://www.joelonsoftware.com/articles/fog0000000319.html
            Алгоритм польского маляра? Баян.

            >Всё равно не хватает скорости - переписать на Си. Всё равно не хватает скорости - переписать на асме.
            Иногда код на асме короче кода на Си. Уже были примеры, когда идиот писал 10-20 строк, чтоб установить/проверить нужный бит.
            Там где достаточно bt/btr/bts. Оно и быстрее и короче.

            Edit: а вот и пруфлинк, бейсик правда.
            http://govnokod.ru/3323#comment28311
            Ответить
            • он еврей а не поляк
              миллионер, гуру, евангелист, и вообще - знаменитый писатель, блоггер и программист
              (факт. не смотря на не особсую мою симпатию к нему)
              Ответить
            • > Баян.
              Да, баян. Но я вынужден его напоминать.

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

              Я искренне не понимаю, почему ты и тебе подобные не наезжаете на стандартные библиотеки других языков? А вот почему-то linq на вас действует так.

              Резюмирую: ололо! stl отучает приплюснутых думать! они скоро совсем разучатся циклы писать! пыщь-пыщь!
              Ответить
              • STL срачи уже не так популярны. Вроде сейчас актуальней boost-флеймы.

                >строковые функции в Си
                Как по мне то строки в Си уебищны по дефолту.
                >не наезжаете на стандартные библиотеки других языков
                Зайди в разделы С/С++, почитай комментарии пользователя TarasB.
                Ответить
              • Более того я тут ложил сырцы Swingа, и вообще стандартные библиотеки жабы местами не то что неудобны.
                Это вообще антиюзабельное говно.
                А Багланд и поделия Адоба не пинал только ленивый.
                Подозреваю, что просто кому-то трудно выйти за пределы уютненького шарпомирка.
                Ответить
                • Нет, ты не увиливай.
                  Ты писал, что недостаток шарпа в том, что якобы отучает использовать циклы. Я привёл в пример стандартные возможности Си и С++, которые позволяют тоже писать без циклов. Но это же не отучило сишников и крестовиков от циклов? Я их как использовал, так и использую, когда это надо.
                  Лично ты наезжал на линк, хотя не знаешь его. Именно поэтому я расписывал (похоже, зря...) достоинства и недостатки линка. Заметь, недостатки тоже.

                  Я приводил в пример именно си и с++, потому что ты отмечался в темах по этим языкам. Я предположил, что хоть чуть-чуть их знаешь, потому я их и использовал.

                  Просто я хочу сделать этот мир лучше. 🙂
                  Ответить
                  • 99% кто ругают линк - не знают линк
                    1% - реальные профессионалы
                    (не все реальные профессионалы ругают линк)
                    Ответить
                    • вы комплиментами обмениваетесь что-ли?
                      пригласите друг друга поужинать
                      Ответить
                      • нет, речь шла не о нем
                        а о вас, линк-критиканах. которые линка не знают. вообще
                        тоже касается и c# в целом. вы его не знаете тоже. вообще.
                        "vb со скобочками", итп.
                        нифига не разбираетесь в предмете, которй критикуете
                        Ответить
                        • ололо, критиканы без особых напрягов могут на жабе свой линк забацать, с блэкджеком и шлюхами
                          Ответить
                            • Пффф, уже почти всё есть в google-guava. Сделать более цельный фреймворк с ленивыми вычислениями по аналогии и прикрутить к нему тред-пул для параллельности - дело 2-3 дней. Лямбд не будет - это основная проблема. А ещё есть functional java.

                              В Clojure (который обычно бегает на JVM) весь ваш линк укладывается в операции над sequence.
                              Ответить
                              • >Лямбд не будет - это основная проблема.
                                Угу. И не забывай про шапросахарок, extnesion-методы которым они расширили язык ради того чтоб всё писалось через точечку.
                                Ответить
                  • >Я приводил в пример именно си и с++, потому что ты отмечался в темах по этим языкам.
                    Ничем примечательным я там не отмечался. Ты что-то путаешь.

                    >Ты писал, что недостаток шарпа в том, что якобы отучает использовать циклы.
                    Я не писал о "недостатке". Это было больше предсказание эволюции вида до-диезников. Совать LINQ где попало.

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

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8