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

    +134

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    private bool CompareLvlCats(string[] cat,List<string[]> cats, int lvl)
    {
        if (lvl == 1) return cats.Find(x => x[0] == cat[0] && (x[1] != cat[1] ||x[1]!="")) != null;
        if (lvl == 2) return cats.Find(x => x[0] == cat[0] && x[1] == cat[1] && (x[2] != cat[2] || x[2] != "")) != null;
        if (lvl == 3) return cats.Find(x => x[0] == cat[0] && x[1] == cat[1] && x[2] == cat[2] && (x[3] != cat[3] || x[3] != "")) != null;
        if (lvl == 4) return cats.Find(x => x[0] == cat[0] && x[1] == cat[1] && x[2] == cat[2] && x[3] == cat[3] && (x[4] != cat[4] || x[4] != "")) != null;
        if (lvl == 5) return cats.Find(x => x[0] == cat[0] && x[1] == cat[1] && x[2] == cat[2] && x[3] == cat[3] && x[4] == cat[4] && (x[5] != cat[5] || x[5] != "")) != null;
        if (lvl == 6) return false;
        return false;
    }

    Здесь мы идём снова.

    Запостил: pushistayapodmyshka, 29 Ноября 2014

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

    • Ясненько. Очень говнокодисто. Хм, а если передать (строим куб параметров, вызвающих исключения, например)

      1) null, null
      2) null, new List<string[]>(null)
      3) null, new List<string[]>(new string[0]{ })
      4) null, new List<string[]>(new string[]{ "1" }, 1)

      1) new string[] { "1" }, null
      2) new string[] { "1" }, new List<string[]>(null)
      3) new string[] { "1" }, new List<string[]>(new string[0]{ })
      4) new string[] { "1" }, new List<string[]>(new string[]{ "1" }), 1

      ну и различные сочетания для массивов от 0 элементов, до 4 (при 5 вылетать не будет)

      то говнокод, в общем-то, будет падать, потому что етьс априорная информация:

      1)число элементов в массивах, находящихся в списке массивов - не меньше (строго больше) уровня массива (равно +1)
      2)не допускаютя null элементы массива, null параметры

      У меня разрыв шаблона
      Ответить
    • А в простом цикле нельзя посмотреть эквивалентный вариант? Что то вроде old style govnokod (for loops)
      private bool CompareLvlCats(string[] cat,List<string[]> cats, int lvl)
      {
        if (cat == null || cats == null || cats.Length <= lvl) 
          throw Exception(Resources.CompareLvlCats_NotEnougthParams);
        for(int =0;i<lvl-1;i++)
        {
          if (cats[i] != cat[i]) return false;
        }
        return cats[lvl] != cat[lvl] || cats[lvl] != string.Empty;
      }
      Ответить

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