1. C++ / Говнокод #23568

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    #include <experimental/coroutine>
    #include <iostream>
    #include <optional>
    #include <utility>
    
    template<typename T>
    class Maybe
    {
        std::shared_ptr<std::optional<T>> m_maybe = std::make_shared<std::optional<T>>();
    public:
        Maybe() = default;
        
        Maybe(const T& t)
        : m_maybe { std::make_shared<std::optional<T>>(t) }
        {
        }
    
        explicit operator bool() const { return static_cast<bool>(*m_maybe); }
        T& operator* () { return **m_maybe; }
        const T& operator*() const { return **m_maybe; }
        
        void reset() { m_maybe->reset(); }
        
        template<typename U>
        void emplace(U&& u) { m_maybe->emplace(std::forward<U>(u)); }
    };
    
    template<typename T>
    void printMaybe(const Maybe<T>& opt)
    {
        if (opt)
            std::cout << *opt << std::endl;
        else
            std::cout << "<empty>" << std::endl;
    }
    
    template<typename T, typename... Args>
    struct std::experimental::coroutine_traits<Maybe<T>, Args...>
    {
        struct promise_type
        {
            Maybe<T> m_maybe;
            
            auto get_return_object() { return m_maybe; }
            
            std::experimental::suspend_never initial_suspend() { return {}; }
            std::experimental::suspend_never final_suspend() { return {}; }
            
            void unhandled_exception() { m_maybe.reset(); }
            
            template<typename U>
            void return_value(U&& u) { m_maybe.emplace(std::forward<U>(u)); }
        };
    };
    
    template<typename T>
    auto operator co_await(const Maybe<T>& maybe)
    {
        struct Awaiter
        {
            const Maybe<T>& input;
    
            bool await_ready() { return static_cast<bool>(input); }
            auto await_resume() { return *input; }
            void await_suspend(std::experimental::coroutine_handle<> coro) { coro.destroy(); }
        };
    
        return Awaiter { maybe };
    }
    
    Maybe<int> maybeAdd(const Maybe<int>& maybeA, const Maybe<int>& maybeB)
    {
        auto a = co_await maybeA;
        auto b = co_await maybeB;
        co_return a + b;
    }
    
    int main()
    {
      /*
        printMaybe(maybeAdd({ 1 }, { 2 }));
        printMaybe(maybeAdd({}, { 2 }));
        printMaybe(maybeAdd({ 1 }, {}));
        */
        const auto res = maybeAdd({ 1 }, { 2 });
        return res ? *res : 0;
    }

    do-нотация в плюсах

    Запостил: j123123, 07 Декабря 2017

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

    • с++ понос
      Ответить
    • а зачем вообще оборачивать optional в shared_ptr? Хочется чтобы объект внутри optional создавался в куче? - можно просто пользоваться unique_ptr. Даже синтаксис ~одинаковый
      Ответить
    • Как же программирование надоело. Зачем я стал крестоблядью.
      Ответить
      • Становись phpшником и программировать не придется
        Ответить
        • Выбери себе работу по душе, и тебе не придется работать ни одного дня в своей жизни.
          Ответить
          • Я, кстати, никогда не мог понять этого: человек стал программистом, 10 лет ему все нравилось, а потом вдруг заибало.

            Разве так бывает? Может, он изначально не хотел программить?
            Ответить
            • Думаю, так бывает. Мышления, приоритеты, требования меняются.

              Можно мечтать программировать, но в жизни - программировать. И вот ты программируешь, программируешь, программируешь. Вроде бы тебе это нравится, вроде бы это то, что ты хотел делать, и ты делаешь то, что хотел, но всё же ты программируешь, а не программируешь. Через десять лет понимаешь, что это фигня какая-то. Ты хочешь программировать, но мир к этому пока не готов.

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

              Может, в школе человеку жутко нравились Pascal и Маша, в институте - C++ и Таня, на первой работе твои мысли по ночам были про Haskell и Алину, а потом пришло осознание, что всё было не так, как надо, и надо думать о работе барбершопе и сладеньком Эльдаре. Но до этого программировать жутко-прежутко нравилось.
              Ответить
              • Моя вселенная программирования бесконечна: в ней никуда ни пойдешь -- везде новые миры, прямо как в современных RPG.
                Ответить
              • И чем же отличается программирование от программирования?
                Ответить
                • программирование - искусство
                  программирование - проституция
                  Ответить
                • Для каждого программирование своё. Кому-то интересные задачи, кому-то - большая зарплата, кому-то - хороший коллектив с идеальным кодстайлом и продуманной разработкой, кому-то - свои выстреливающие проекты, кому-то - возможность 10 месяцев в году вяло поддерживать свой готовый продукт на диване и получать деньги с проданных копий.
                  А программирование - то, что предложили человеку извне.
                  Ответить
                  • А почему нельзя совмещать?

                    Блин! На свете есть не только писание бойлерплейта на галерах, есть еще и интересные задачи
                    Ответить
                    • Совмещать можно.
                      Ответить
                      • Совмещать уныло. Пока привыкнешь к одним глюкам, багам и особенностям - тебя тут же ждут другие в другом..
                        Даешь кроссязык, "где все отображается одинаково"
                        Ответить
            • Конечно бывает. Когда ты ньюфаг, все воспринимаешь позитивно. А чем дальше, тем больше косяков вокруг замечаешь, тем меньше все нравится. А еще программить и работать программистом - не одно и то же. Интересы бизнеса и говнокод соседа легко отобьют любовь к ремеслу.
              Ответить
              • Эта проблема мне известна.
                Она лечится сменой работы, языка и предметной области.

                Вжжух -- и ты снова ньюфаг, и вокруг тебя мир цветет и пахнет, словно тебе 14 лет и ты впервые написал "угадай число" на паскале
                Ответить
                • > Вжжух -- и ты снова ньюфаг
                  И тебе 40 лет, одноклассники - большие боссы и уважаемые люди, а ты у недавнего выпускника на посылках.
                  Думаю, ньюфагом можно побыть, когда ты сам в жизни ещё ньюфаг. С возрастом приходит желание оставить при себе статус; способность выкинуть всё отмирает. Ну или надо быть дико творческим, смелым и молодым в душе человеком, уважающим себя, чтобы твёрдо сказать себе, что твой опыт - говно, и надо всё менять.
                  Ответить
                  • А типа в барбершопе лучше?
                    Ответить
                    • В барбершопе наверно как с новым языком - ты снова ньюфаг, надо набирать опыт.
                      Ответить
                • > Она лечится сменой работы, языка и предметной области.
                  Плюсану. Только я ещё и город сменил.

                  З.Ы. Боюсь, что на второй подобный прыжок веры меня уже не хватит...
                  Ответить
                  • хм) Ты забурился еще глубже в лоу-левел?

                    На самом деле каждый новый прыжок дается легче, потому что, по правде говоря, ты же не совсем нуб.

                    Ну вот если бросить тебя в чужую область (ну там 1С или клиент сайд веба) ты же не будешь там "совсем нубом"
                    Ответить
                    • > ещё глубже
                      Не, я про переезд в нск пару лет назад.
                      Ответить
                      • А что в переезде в другой город такого пиздецового?
                        Ответить
                        • Переезд в нск - звучит очень пиздецово, если честно. Хотя может он ещё из более глубокой жопы переехал.
                          Ответить
                          • Да не, нск — очень даже приятный город.

                            В общем-то этот ваш муравейник москва после него не особо впечатляет. Разве что центр красивый да метро почаще ходит.

                            > из более глубокой жопы
                            Глубже только деревни.
                            Ответить
                  • Помню, нам преподаватель физики в универе рассказывал про своего одногруппника, который каждые 5 лет менял профессию, квартиру и жену.
                    Ответить
                    • Кстати, а с переездом в другую страну сильно много заморочек выходит?
                      Ответить
                      • Вменяемый работодатель берёт большую часть волокиты на себя.
                        Ответить
                        • Вообще, бюрократия преодолима. Самое страшное -- языковой барьер. Я сильно считерил, т.к. шведы прекрасно разговаривают по английски (но при этом избегают переводить любые таблички и документы). Но опять-таки, добрая половина английских слов была позаимствована из скандинавских языков, что всё сильно облегчает.
                          В других странах, думаю, было бы гораздо сложнее.
                          Ответить
                          • > шведы прекрасно разговаривают по английски
                            Наверно, те шведы, с которыми ты работаешь? Или кассирши в суперах тоже?
                            Ответить
                            • Вообще все. Только старички из какого-нибудь Усть-Karlstad-а может не могут или не хотят.
                              Ответить
                            • > кассирши в суперах
                              И о чём с ними говорить? Молча вытряхнул покупки на кассу, расплатился карточкой да пошёл домой. В этом и профит супермаркета (по крайней мере для меня).
                              Ответить
                              • У нас к ним можно даже не подходить, почти везде есть кассы самообслуживания.
                                Ответить
                          • > избегают переводить любые таблички и документы

                            Вот. У нас все официальные документы на немецком. У нас есть люди, которые прожили 7 лет без знания языка, но тогда, кмк, живёшь в "пузыре".

                            Заказать хавку на немецком в горной кафешке, к которой ты поднимался два часа и где никто не говорит по английски – бесценно.
                            Ответить
                      • Зависит от размера семьи. Чем больше семья, тем больше заморочек. Если ты один, то должно быть относительно просто. В первый год довольно много всего оформлять и много в чём разбираться: регистрация, банковский аккаунт, квартира, мебель, мед. страховка, транспортная система, экзамены для обмена водительских прав, язык, налоговые декларации, сортировка мусора, etc.
                        Ответить
                        • Да-ааа, твоему папику было проще презик надеть.
                          Ответить
                        • > мебель
                          Квартиры без дефолтной мебели сдают?
                          Ответить
                          • Здесь обычно без мебели и даже без осветительных приборов. Зато кухня в комплекте.
                            Ответить
                      • Борманду надоело быть русней?

                        А чего вам в стране не сидится? То, что вы можете себе позволить у себя на зарплату фрилансера на удаленке (например, содержать суку с детьми), там... ну может и сможете, но уже будете на уровне средней зарплаты по стране.
                        Ответить
                        • > надоело быть русней
                          Не, просто сменить обстановку и пару-тройку лет где-нибудь пожить ради интереса.
                          Ответить
                          • Ты же сам писал что переезд с новосибирск еле осилил
                            Ответить
                            • > еле осилил
                              > что в переезде в другой город такого пиздецового
                              Где я это писал?

                              Просто лениво поднимать жопу с дивана когда вокруг всё знакомое и привычное, а надо ехать куда-то в неизвестность. Подсознание цепляется за любые отмазки лишь бы не менять обстановку. Это и было основной проблемой.

                              А в остальном — впечатления только положительные.
                              Ответить
                          • Ехать надо минимум года на три. Первый год – самый сложный. Ко второму начинаешь привыкать. К третьему будет понятно, нравится тебе тут или нет.

                            Если нужны рекомендации в Г – пиши мне на почту.
                            Ответить
                            • Сколько "бормандов" уже отписалось?
                              Ответить
                            • а как ты можешь рекомендовать человека, если ты не знаешь о нем ничего, кроме того что он сидит на говнокод ру?
                              Ответить
                              • Достаточно описать размеры входного и выходного отверстий, полагаю.
                                Ответить
                                • Послушай, если ты описываешь своих родителей с помощью размеров отверстия, то это вовсе не значит что Роману это интересно
                                  Ответить
                              • >как ты можешь рекомендовать человека, если ты не знаешь о нем ничего, кроме того что он сидит на говнокод ру?


                                «Сидит на Гк», да это же лучшая рекомендация!Люди тут по пять-дждесять лет сидят. Все как родные. В нынешние времена не у всех брак столько длится.
                                Ответить
                                • - Он сидит на ГК, смотрит аниме, играет в кружочки и живёт с подушкой.
                                  - Как раз такого сотрудника мы и искали!
                                  Ответить
                                  • > смотрит аниме

                                    Можно подумать, у нас мало одиноких любителей аниме или заядлых геймеров. Это не главное.
                                    Ответить
                                  • Кстати, у меня тут как минимум четверо знакомых из Новосибирска.
                                    Ответить
                                  • В нормальных конторах, где не правят балом эффективные менеджеры, принимающая сторона должна быть примерно такой же, разве нет? Всё же программирование, как и другая профессия, оставляет отпечаток, программист должен попасть в один из программистских архетипов.
                                    Ну а если конторе важен "облик примерного человека", может ну её нафиг? Эти клоуны шорты запрещают, на формальную питушню напирают.
                                    С другой стороны тот, кто играет в кружочки и живёт с подушкой, более надёжен. Денег ему одному должно хватать, отпрашиваться из-за болезни жены и детей не будет, в свободное время будет высыпаться, в целом будет более спокойным. Конечно, работать ради работы не будет, но в нормальных условиях будет эффективным.
                                    Ответить
                                    • > в свободное время будет высыпаться
                                      Ты сейчас точно про геймера-анимешника?
                                      Ответить
                                      • Не знаю, насколько всё может быть плохо, но геймер-анимешник может лечь в изнеможении и заснуть в тишине. А семейному человеку будут мешать звуки снаружи.
                                        Ответить
                                        • > заснуть в тишине
                                          ...но соседями геймера-анимешника могут оказаться семейные поганцы.
                                          Ответить
                                        • семейному человеку будет мешать семья, и он не сможет работать 12 часов на работе, а потом еще 14 часов заниматься своим проектом
                                          Ответить
                                          • Если интересная питушня, и правда. Главное - работодателю не надеяться на то, что это может продолжаться достаточно долго и без щедрой дополнительной платы.
                                            Ответить
                                            • > без щедрой дополнительной платы
                                              Говорят, что денежная мотивация — одна из самых простых и дешёвых.

                                              А вот человек, который "работает ради работы" может обойтись намного дороже — для него придётся выбирать интересные задачи, а потом он просто возьмёт и съебётся прямо перед дедлайном. Ибо осталось только доделать пару мелких штрихов и дофиксить баги.
                                              Ответить
                                              • Зависит от того, чем ты занимаешься.

                                                Если ты делаешь что-то инновационное, или хотя бы просто коробочное то конечно тебе нужны люди, которым _интересно_ и переманить такого человека чистым увеличением ЗП будет сложно (ну конечно если ты не умножишь её на 10).

                                                А если ты скучный аутсорсер, и тебе нужны галерщики чтобы ковырять палочкой легаси говно на пятой джаве, и писать CRUD запросы и бойлерплейт, то кроме денег и соцпакета у тебя аргуметнов нет.
                                                Ответить
                                                • > Если ты делаешь что-то инновационное

                                                  То всё равно 90% ты будешь думать, как обрабатывать ошибки, чинить баги, отлаживать код и пилить инфраструктуру.
                                                  Ответить
                                                  • Да это-то понятно, розовых пони не существует, но творческая жилка все равно нужна. Как минимум тебе надо придумать что-то, чего еще нет. А галерщик обычно ничего не придумывает.
                                                    Ответить
                                  • P.S. Если не хочешь в корпорацию зла, достающую всех рекламой, крадущую персональные данные и печеньки, то черкни на гмыло skmshj. У нас есть fika!
                                    Ответить
                                    • А surströmming есть?
                                      Ответить
                                    • > крадущую персональные данные и печеньки

                                      Я лично отбираю у детей куки не менее 3 раз в день
                                      Ответить
                                      • А ещё ты убил все нормальные мобильные оси своим шпионским ведроидом!
                                        Ответить
                                        • Не забывай, что я ещё лично слежу за тем, что ты покупал на прошлой неделе, чтобы потом полгода показывать тебе это AdSense.
                                          Ответить
                                          • В этом ты уже признавался, см. цитату
                                            > Про борманда я могу рассказать больше,
                                            Ответить
                                • Верно подмечено. А уж если рассмотреть, как тут вспыхивают и затухают срачи, то и правда выходит идеальная семья.
                                  В одном треде бьются на мечах, в соседнем жмут руки и вместе смотрят сериал с попкорном.
                                  Ответить
                              • > ты не знаешь о нем ничего, кроме того что он сидит на говнокод ру?

                                Это ты больше ничего не знаешь. Про борманда я могу рассказать больше, чем про большинство своих коллег.
                                Ответить
                              • И этот человек про забытого Богом Стертором Вебкилла нам говорил. Все заслуги Борманда на виду.
                                Ответить
              • > Интересы бизнеса и говнокод соседа легко отобьют любовь к ремеслу.
                Мне помогает то, что у меня изначально не было любви к ремеслу. ¯\_(ツ)_/¯ Для меня программирование -- приносящая деньги прокрастинация по отношению к действительно интересным вещам.
                Ответить
                • Вообще, интересное наблюдение: когда я пишу некий код сам для себя с нуля чисто для фана, я пытаюсь его каким-то правильным образом структурировать, вылизать так сказать. Когда же мне по работе достается некая написанная кем-то кривая хрень с кучей говнокода, и мне надо что-то там поправить/дописать, я обычно совершенно не заморачиваюсь над попытками сделать все правильно, и делаю это в том же говнистом стиле. Как говорят в армии, пусть будет всё безобразно, но однообразно. За переписывания говнокода, написанного кем-то до меня, мне никто не заплатит. К тому же тут наверняка срабатывает https://ru.wikipedia.org/wiki/Теория_разбитых_окон
                  Ответить
                  • Спасает модульность: делаешь свой манямирок, ощетинившийся малым API, а внутри у тебя красота и блеск.

                    Но вообще 90% кода вокруг меня не айс. Хотя 90% чего угодно вокруг меня не айс
                    Ответить
                    • Если по условию дан многоквартирный дом, построенный весь из говна, и в нем одну квартиру строить из кирпича, вонь остального дома будет просачиватся в эту "правильную" квартиру, говно будет прилипать к обуви при входе из подъезда в квартиру, другие строители пропатчат построенную тобой правильную квартиру, добавив туда табуреток из говна. В конечном итоге все это засрется и никакой существенной разницы не будет между обычной говноквартирой в этом доме, и квартирой из кирпича. Будет лишь зря потраченное время на попытку сделать неговно в окружении говна

                      http://2k.livejournal.com/520078.html
                      Ответить
                      • Жизнено сказал, подпишусь под каждым словом.
                        Ответить

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