1. PHP / Говнокод #20361

    +4

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    /**
      * @param int $day
      * @return bool
      */
    protected function isWorkingDay($day)
    {
        return $day % 8 <= 5;
    }

    Cпособ определить, является ли указанный день (передается номер дня в неделе от 1 до 7) рабочим. Чем автора не устроил return $day <= 5 - непонятно..

    Запостил: feversocial, 11 Июля 2016

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

    • Наверное тем что предполагалось что будет передаваться день месяца, а потом забили?
      Ответить
      • А может день с начала года или что-то в этом духе.
        Ответить
      • передается именно номер дня в неделе, т.е. date('N'). в данном методе можно хоть $day % 8, хоть $day % 20 - результат при $day <= 7 все равно один и тот же :-)
        Ответить
    • Тогда уж (day - 1) % 7 < 5
      Ответить
    • > @param int $day
      > @return bool
      Ахуенный докстринг.
      Ответить
      • я сначала подумал что % 8 - это чтобы к инту привести, но потом посмотрел на phpDoc
        Ответить
        • А вдруг они там правда работают 6 дней из 8?
          Ответить
      • Что не так?
        Ответить
        • Из него просто офигенно понятно, что делает данная функция, какие параметры она ждёт и какие на них есть ограничения.
          Ответить
          • Ну раз всё понятно, тогда что не так⸮
            Ответить
          • Ну разве что можно добавить описание $day. А в ообще докстринг сделан на скорую руку для того чтобы указать типы, кому не нравится пусть допишет :)
            Ответить
          • Вот меня на работе заставляют как-то так делать:
            // This class holds debug information.
            class DebugInformation {
                public:
                    // Returns the link to see debug information.
                    string link() const { return m_link; }
                    // Sets the link to see debug information.
                    void set_link(string link) { m_link = std::move(link); }
                private:
                    // Holds the link to see debug information.
                    string link;
            }

            НАХУЯ?
            Ответить
            • > string link
              > m_link = std::move(link);
              И правда, нахуя?
              Ответить
              • void set_link(string link) показывает, что класс DebugInformation скопирует к себе строку, переданную как параметр. Если бы передавался const string&, caller мог бы подумать, что мы берём ссылку на строку, и исходную строку нельзя освобождать.
                А подход c std::move позволяет иметь столько же копирований, сколько и при приёме const string&, но быть более понятным в сигнатуре.
                Ответить
                • А если оригинальная строка не нужна и вызывающий сделал move сам, то получается очень быстро. Данный подход позволяет избавиться от 2х перегрузок для l и r-values
                  Ответить
              • > И правда, нахуя?

                Борманд, где твоё C++-чутьё? Так же можно сыкономить одно копирование, выжать каплю ПИРФОМАНСА, если в качестве входного параметра передаётся временный объект! Мув же почти бесплатный.
                // Временный объект, созданный из const char *,
                // не будет скопирован, его содержимое переедет
                // внутрь debugInfo без копирования!
                debugInfo.set_link("http://lmgtfy.com/");
                
                // Аналогично, если вызывающему строка
                // больше не нужна, и он мувает её сам.
                debugInfo.set_link(std::move(rtfm_link));
                Ну и так меньше унылых констрефов писать.
                Ответить
                • А почему в первом примере не произойдет копирование по значению при передаче в set_link?
                  Ответить
                  • Потому что его переместят а не скопируют.
                    Ответить
                    • так а почему его переместят?
                      метод ожидает string, и я думал const char* преобразуется в string, потом по значению передается в set_link
                      Ответить
                      • У string есть конструктор, принимающий const char* то есть параметр set_link будет создан напрямую из const char*
                        Ответить
      • да это автогенерация, к которой проебали написать описание
        Ответить

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