1. Java / Говнокод #1698

    +70

    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
    for(int i = 0; i < s.length(); i++)
            {
                String c = s.substring(i, i + 1);
                if("_".equals(c) || " ".equals(c) || "-".equals(c))
                {
                    capitalize = true;
                    continue;
                }
                if(c.toUpperCase().equals(c))
                {
                    if(lastDecapitalized && !lastCapital)
                        capitalize = true;
                    lastCapital = true;
                } else
                {
                    lastCapital = false;
                }
                if(capitalize)
                {
                    if(p == null || !p.equals("_"))
                    {
                        result.append(c.toUpperCase());
                        capitalize = false;
                        p = c;
                    } else
                    {
                        result.append(c.toLowerCase());
                        capitalize = false;
                        p = c;
                    }
                } else
                {
                    result.append(c.toLowerCase());
                    lastDecapitalized = true;
                    p = c;
                }
            }

    Позор Jboss'овцам!
    это код из HibernateTools, теперь понятно почему оно такое глючное Г

    Запостил: asdqwezx, 27 Августа 2009

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

    • А в чем проблема то? ИМХО аффтар не разабрался просто, что этот код делает.

      Единственная проблема которую я вижу, это работа со строками длинны 1, вместо работы с char. Но учитывая, то что этот код выполняется один раз когда генерятся/проверяются мапинги, перфоманс не критичен.
      Ответить
      • аффтар разобрался
        я своим стажёрам за такой код сразу отсекаю гендорный фактор ;)
        какая разница критично оно к скорости или нет, этот же код ещё потом поддерживать надо

        неиспользование char это только первый пункт, второе это
        if(capitalize)
        {
        if(p == null || !p.equals("_"))
        {
        result.append(c.toUpperCase());
        capitalize = false;
        p = c;
        } else
        {
        result.append(c.toLowerCase());
        capitalize = false;
        p = c;
        }
        } else
        {
        result.append(c.toLowerCase());
        lastDecapitalized = true;
        p = c;
        }
        оно правильно пишется так
        lastDecapitalized |= !capitalize;
        result.append(capitalize || (p!= null && '_' == p) ? Character.toUpperCase(c) : Character.toLowerCase(c));
        capitalize = false;
        p = c;
        или около того
        Ответить
        • Твой вариант просто не читабельный, выгоды не вижу.
          Ответить
          • ну разверну я тренарный оператор, что измениться то?
            проблема не в количестве строк, а в том что действия (p = c, capitalize = false;), которые ВСЕГДА выполняются за каким-то лядом прописаны во все ветки условий
            Ответить
            • Их нужно было тупо за условие вынести.
              Ответить
              • спасибо, Кэп!
                что и было проделано, остальные изменения - дело вкуса (и наличия автоматического форматтера кода)
                Ответить
    • Я умылся и вымыл ноги, разделся и забрался в прохладную постель, провалился во взбитую пуховую перину и мечты о Пашке снова овладели моим организмом. Я стащил трусы, скомкал и обнял подушку, как будто это был Пашка и быстро уснул.
      Ответить

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