1. C# / Говнокод #19721

    +3

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    public static bool AddStringIfNoExist(this List<string> strlist, string str)
    {
        if (str == "") return true;
        foreach (string s in strlist) if (s == str) return true;
        strlist.Add(str);
        return false;
    }

    Hashset? А что это такое?

    Запостил: kerman, 29 Марта 2016

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

    • *лавров.жпг*
      Ответить
    • Может быть, основной use case как раз подразумевает List.
      Функция для решения маленькой конкретной подзадачи - разве что public смущает.
      Ответить
      • А static и this не смущают?
        Это extension method, он для всех листов работать будет. Так что для решения маленькой конкретной подзадачи не катит, хотя бы потому, что доступен отовсюду.
        В коде используется для получения коллекции уникальных стрингов из другой коллекции.
        Ответить
        • Ну если класс не публичный, то extension method, как я понимаю, будет виден в пределах данной библиотеки...
          Ответить
    • В extension'ах следует обрабатывать нулевой аргумент – кинуть ArgumentNullException.
      Ответить
      • А зачем? Чтобы вместо плохого, негодного NRE строчкой ниже, был кавайный ANE с тем же самым стеком?
        Ответить
        • NRE там может случиться по разным причинам и это отдельная забота его обрабатывать. Тут ты сразу говоришь что мне говна не надо в методе.
          Ответить
          • У меня мания - я не люблю лишние строчки плодить. И сущности. И вообще делать что-то лишнее. Для NRE тут только один повод - если this == null. И приводит к тем же резалтам, что и проверка на нулл в начале метода, если не считать случай с блядской проверкой на пустую строку. Так если разницы нету, зачем платить больше?
            Пусть мучается та макака, которая вызовет ЭТО для нулл.
            Ответить
            • Можешь оказаться жертвой собственного кода.
              Ответить
    • Ах, да, забыл сказать, что автор этого говна - я. А говно оно по трём причинам:
      1. O(N) вместо O(1), а с учётом использования это O(квадрат) вместо O(N).
      2. Частный случай проверки на пустую строку в общем алгоритме.
      3. Замусоривание выдачи intellisence методов для всех листов.

      А, ну да, ещё форматирование говно.
      Ответить

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