Кресты / Говнокод #11495 Ссылка на оригинал

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
auto addition = [] (double a, double b) { return a + b; };

auto substruction = [] (double a, double b) { return a - b; };

auto divide = [] (double a, double b) { return a / b; };

auto multiplie = [] (double a, double b) { return a * b; };

typedef std::function<double (double, double)> DoubleFunc;

int main()
{
    std::vector<DoubleFunc> funcVector;

    funcVector.push_back(addition);
    funcVector.push_back(substruction);
    funcVector.push_back(multiplie);
    funcVector.push_back(divide);

    std::for_each(funcVector.begin(), funcVector.end(), []
    (DoubleFunc func)
    {
        std::cout << func(3.14159, 100500) << std::endl;
    });

    system("pause");
    return 0;
}

А ваш язык такое сможет:)? (я о delphi, java, etc.)
Кстати, если писать все в таком духе, то параллелиться прога будет безболезненно:), правда это уже какой-то хацкель/лисп...

Запостил: suc-daniil suc-daniil, (Updated )

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

    • Там же где и в хацкеле, но это только при условии что вся прога так написана будет:)
      И я имел ввиду, чтобы чисто функциональные объекты были, лежали в непрерывном куске памяти и т.д.
      Ответить
      • так и запишем: функциональные объекты лежат в непрерывном куске памяти, а сраное императивное говно в дискретном
        Ответить
        • В непрерывном куске памяти бесконечно большого объема.
          fix
          Ответить
  • Пффффф.

    funcs :: [Float -> Float -> Float]
    funcs = [(+), (-), (*), (/)]
    
    main = mapM_ (print . \f -> f pi 100500.0) funcs]
    Ответить
    • Это я в основном на тему холиваров аля C++VS..., так что долго преречислять
      Ответить
      • Аналогичные махинации возможны в любом современном языке (да даже в сишке и _вроде_ в паскале можно [Тарас поправит, если что]). Так что непонятно, что вы хотели показать кодом в топике.
        Ответить
      • >...так что долго преречислять
        " .удиви меня .заинтригуй меня . "(c)
        Ответить
      • Нахуй вообще просить пользователя "нажать кнопку для завершения"? Без этого никак?
        Ответить
        • Да, никак, без этого ты не увидишь результата (я про конкретно про студию), прога просто завершится
          Ответить
            • Авотхрен, не фурычит, кроме шуток, тут либо пауза, либо getchar, либо что-то ещё в этом роде
              Ответить
                • http://social.msdn.microsoft.com/forums/en-US/Vsexpressvc/thread/1555ce45-8313-4669-a31e-b95b5d28c787/?prof=required

                  system("pause") is probably the best way.
                  Визуалстудиофаги такие няшки!

                  Зато там есть правильный ответ:
                  With the new visual studio 2010 you might see this behavior even when you use ctrl f5 aka "start without debugging". This is most likely because you created an "empty project" instead of a "Win32 console application".

                  In the older versions it would default to the console subsystem even if you selected "empty project", but not in 2010, so you have to set it manually. To do this select the project in the solution explorer on the right or left (probably is already selected so you don't have to worry about this). Then select "project" from the menu bar drop down menus, then select "*project_name* properties" > "configuration properties" > "linker" > "system" and set the first property, the drop down "subsystem" property to "console (/SUBSYSTEM:CONSOLE)". The console window should now stay open after execution as usual.
                  Ответить
                    • Блин. Сейчас попытался описать проблему другу, который пользуется Visual Studio 2010, думал вместе посмеемся над пишущими system("pause")...

                      Так оказалось, что после перехода на 2010 он сам так пишет, т.к. влом крутить настройки проекта...

                      Куда катится мир...
                      Ответить
                        • А он есть? (года 3 не запускал визуалку, не помню уже).
                          Ответить
                          • ну да
                            создаешь консольный проект, ставишь тыцку "не надо мне никакого говна, хочу голый проект" и профит
                            Ответить
                  • Не знаю, кого как, но меня никогда не напрягало открыть (лишнюю) консоль. Кушать она не просит, выводит исправно. Ну и да, если средства отладки поддерживают - тем более.
                    Ответить
                    • > открыть консоль
                      Да вы что, не пугайте человека такими страшными словами! Он поди и не знает, зачем нужна эта самая консоль...
                      Ответить
                      • Консоль? Командная строка штоле? Говорите правильно!
                        Ответить
                        • Хотел отправить под новым аккаунтом, т.к. старый забанил модератор, но получил ошибку компиляции комментария:
                          Пожалуйста, подождите неделю, прежде чем Вам будет доступно комментирование., поэтому пишу под этим.

                          Командная строка Windows.
                          fxd
                          Ответить
                          • Я же написал тебе в ЛС - свежевыданный модераторский аккаунт активируется через неделю.
                            Ответить
                            • >Хотел отправить под новым аккаунтом, т.к. старый забанил модератор
                              >свежевыданный модераторский аккаунт
                              O_O
                              Ответить
                    • Только в vs через неё отлаживать как-то хреново...(особенно dx)
                      Ответить
                      • Софт с DirectX в эксклюзивном режиме отлаживать хреново и без нее 😉 А в неэксклюзивном какие проблемы?
                        Ответить
          • Результаты тестирования пациента:
            1) Знание английского - нет
            2) Знание с++и STL - нет
            3) Знание С - нет
            4) Знание основных команд студии - нет
            5) Опыт троллинга - нет
            Ответить
        • Это вендопроблемы: заставлять юзера тыкать 100500 раз кнопку "далее" и не давать отойти ни на шаг. Даже с гентой на кофеварке будет проще: поставил компиляться и ушел спать
          Ответить
  • Посоны, кто знает, как в Хаскеле сделать вот так:
    f = id _ pi 100500.0
    _ - теперь свободный параметр по обозначаниями Nemerle, а pi 100500.0 - забинденные.
    Теперь можно делать так:
    f (*)
    что эквивалентно
    (id (*)) pi 100500.0
    что эквивалентно
    (*) pi 100500.0
    что эквивалентно
    pi*100500.0
    ?
    То есть смысл, чтобы f была объявлена без своего параметра. Лямбду через \ не предлагать, так как параметр там будет.
    Ответить
    • Для бинарных ф-ций можно вот так:
      (`f` 2)
      ==
      f _ 2

      А для остальных нужны лямбды:
      \x y -> f x 1 y
      ==
      f  _ 1 _


      А без лямбд никак.
      Ответить
      • >А без лямбд никак.
        Ну может какими-нибудь хаками выразить через $ . id или flip ?
        Ответить
      • Это мне было нужно было только для:
        bindSnd snd' f = (`f` snd')
        funcs = [(+), (-), (*), (/)]
        main = print $ map ((bindSnd 100500.0) ((bindSnd pi).id)) funcs

        Победа не чистая, так как пришлось написать свою функцию bindSnd, но код работает. Очевидно пока проще написать через лямбду \.
        PS Я не против варианта через какие-нибудь стрелочки и прочих хаков, но пока все говно.
        Ответить
        • Кстати, кто скажет, почему если написать ((bindSnd 100500.0).((bindSnd pi).id)) - не компилируется? (Я там красную точку поставил).
          Ответить
  • funcs = [(+), (-), (*), (/)]
    main = print $ zipWith (uncurry.id) funcs $ repeat (pi, 100500.0)

    Без лямбд.
    Ответить
  • да, может, даже досовский турбопас, и без лямбд
    короче школьник рассказывает о преимуществах ололо сиплюсплюса на примере того, что в паскале 20 тоже лет назад было
    поставил плюс чтобы не утонуло, срач доставил
    Ответить
  • >А ваш язык такое сможет:)? (я о delphi, java, etc.)
    В шарпе даже этого писать не надо. Там есть LINQ.

    >то параллелиться прога будет безболезненно:)
    AssParallel, aга!!!
    Ответить
    • то, что ты привёл - это указатель на функцию(точнее паскалевский аналог оного), а разницу между указателем и объектом я думаю тебе объяснять не нужно:)
      Ответить
      • Разница между std::function и указателем на функцию в том, что std::function может содержать любую хрень со скобками (функции, объекты с оператором(), замыкания и т.п.).

        В вашем примере эта возможность никак не используется, и вполне достаточно указателя на функцию 😉 Учитесь составлять более подходящие примеры, если хотите затроллить оппоннента...
        Ответить
        • А попутно, там можно обойтись без лямбд, да и вообще без плюсов;) Спасибо за адекватный пост:)
          Ответить
      • Ты серьезно думаешь, что в твоем векторе содержится исполняемый код, который ты даже описал в другом месте?

        #include <iostream>
         
        class A
        {
          public:
            double add(double a, double b)
            {
              return a + b;
            }
        };
         
        int main()
        {
          A* object = NULL;
          std::cout << (*object).add(3.14, 100500);
          
          return 0;
        }


        тогда что случится в результате выполнения этого кода?
        Ответить
        • Он упадёт:) NULL нельзя разыменовывать:)
          А вектор содержит экземпляры функторов, то есть объекты.
          Ответить
            • Положил бы уж NULL в ссылку для полноты ощущений
              Ответить
            • Блин, как я мог забыть, add компилятором разворачивается во что-то типа A_add. Я был бы прав, если бы capture list не был пуст:(
              Кстати, почему оно округляется, если там double?
              Ответить
              • Я тебя не совсем понял, но как ты не можешь понять, что в компилируемых языках код не может просто так взять и дописаться в память? Он должен предварительно скомпилированным быть. И даже если есть у тебя бинарное представление уже скомпилированного кода то смысла нет размещать его в другой кусок памяти, так как одного экземпляра достаточно.

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

                Попробуй еще задаться вопросом: почему в С++ нет функции eval?

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

                И надеюсь ты понимаешь, что зря решил повыебываться этим твоим говно++
                Ответить
                • Боюсь, он воспринимает подобные радиосигналы как белый шум и не более ='( жОпыта нет
                  Ответить
  • Перл (никто не упомянул) само собой разумеется. Но такое я даже на шелле могу сделать - и даже без башизмов.
    Ответить
  • Я последнее время стал принимать Нетолстин и вам советую.
    Ответить
    • Над вашими шутками перестали смеяться?
      Вас называют толстым троллем?

      Приобретите Нетолстин™, и вы снова почувствуете уверенность в себе, а ваш троллинг будет тонким и шелковистым.
      Ответить
      • Я недавно попробовал Антитроллин, но оно мне как-то не пошло. От него я стал увядать. Я даже начал думать, что это яд.
        Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

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


    8