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

    −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
    // https://habr.com/ru/company/jugru/blog/438260/
    
    template<Semiregular T>
    struct maybe_view : view_interface<maybe_view<T>> {
      maybe_view() = default;
      maybe_view(T t) : data_(std::move(t)) {
      }
      T const *begin() const noexcept {
        return data_ ? &*data_ : nullptr;
      }
      T const *end() const noexcept {
        return data_ ? &*data_ + 1 : nullptr;
      }
    private:
      optional<T> data_{};
    };
    inline constexpr auto for_each =
      []<Range R,
         Iterator I = iterator_t<R>,
         IndirectUnaryInvocable<I> Fun>(R&& r, Fun fun)
            requires Range<indirect_result_t<Fun, I>> {
          return std::forward<R>(r)
            | view::transform(std::move(fun))
            | view::join;
      };
    inline constexpr auto yield_if =
      []<Semiregular T>(bool b, T x) {
        return b ? maybe_view{std::move(x)}
                 : maybe_view<T>{};
      };
    
    /*
    > Быть может, что для кого-то это язык родной, но для меня всё
    это ощущается как если бы кто-то решил, что Perl излишне читабельный,
    а Brainfuck — излишне нечитабельный, поэтому давайте целиться между
    ними. Я программировал в основном на C++ все последние 20 лет. Может
    быть, я слишком тупой, чтобы во всём этом разобраться, отлично.
    */

    Какой багор)))

    Запостил: j123123, 31 Января 2019

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

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

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

      Хотя на самом деле это мастерство преодоление трудностей не нужно нормальному человеку, ибо здравомыслящий человек предпочитает избегать трудностей, а не героически преодолевать их, доказывая кому-то свою крутизну. Ну, это как если б кто-то жил в засранной квартире с кучей битого стекла и ржавых гвоздей торчащих из досок, и он поэтому научился ловко обходить битое слекло и гвозди, и потом среди таких же жителей засранных квартир он будет мегакрутым спецом. Но нормальный человек просто покрутит у виска и скажет, что навыки перепрыгивания через говно, гвозди и битое стекло нормальному человеку нахрен не нужны, и что он лучше будет жить в нормальной квартире, чем задрачивать навыки жизни в говне и потом выебываться этими навыками перед такими же долбоебами
      Ответить
    • Maybe yes,
      Maybe no,
      Maybe rain,
      Maybe snow.
      Ответить
    • В С++ идеология всё делать посредством библиотеки вместо впендюривания специальной грамматики. Поэтому все эти "ха-ха" примеры из С++ обычно подходят скорее для основополагающих базовых библиотек (как в примере: foreach, yield и т.д.); юзер-код обычно не изобилует многоэтажными конструкциями, т.к. ему это не надо -- вся многоэтажность вынесена в основополагающие библиотеки.
      Ответить

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