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

    +82

    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
    private static final String QUERY = 
            new StringBuffer("SELECT p.id FROM policysummary p ") 
                .append(" WHERE p.currentRevisionInd     = 1 ") 
                .append("AND p.policyStatusCd          IN ('issued') ") 
                .append("AND p.timedPolicyStatusCd     IN ('inForce') ") 
                .append("AND p.txType                  IN ('policy','renewal','endorsement','reinstatement') ") 
                .append("AND p.expiration <= :requestDate ") 
                .append("AND :requestDate <= (p.expiration + :requestTo) ") 
                .append("AND NOT EXISTS ") 
                .append("  (SELECT prs.id ") 
                .append("  FROM PolicyReportStatus prs ") 
                .append("  WHERE prs.policyId  = p.id ") 
                .append("  AND prs.mvrOrderDt IS NOT NULL ") 
                .append("  )") 
                .toString();

    Недавно выдавили заграничные коллеги

    Запостил: roman-kashitsyn, 24 Февраля 2012

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

    • ещё и с выравниванием по-тарасовски
      Ответить
      • однозначно нужен термин
        тарастайл?
        тарасыравнивание?
        тарасотступ?
        тарасбивка?
        Ответить
      • чё
        Ответить
        • строки 4-6 и твоя идея с автовыравниванием
          Ответить
          • Понял.
            По-моему, хороший пример.
            Ответить
          • Ну и что. Я тоже так частенько ровняю
            руками
            Ответить
          • только тут ручками всё, ручками
            Ответить
          • Я сам так выравниваю, весьма эстетично получается. Для этого даже elastic tabstops придумали.
            Но есть минус: если надо дописать более длинное выражение в том же блоке, то надо остальные тоже пробелами подогнать. Неудобно.
            Ответить
    • Интересно, почему в нашем проекте никто (кроме меня) не использует @NamedQuery, всё через конкатенацию строк...
      Ответить
      • судя по всему, и на говнокод никто из вашего проекта не заходит (кроме тебя)
        Ответить
      • Так ведь в @NamedQuery вроде как один фиг текст запроса придется забивать?
        Да и не всегда они удобны. Даже хотел бы услышать в чем их преимущества =)
        Ответить
        • 1. Они разбираются один раз на старте приложения, потому выполняются быстрее (не надо каждый раз разбирать текст запроса и строить АСД).
          2. Соответственно, ошибки в таких запросах обнаруживаются сразу, а не случайным образом в рантайме.
          Ответить
          • +1 за ответ.

            К сожалению, мое приложение не позволяет из активно юзать. =)
            Ответить
    • Самое забавное, что через + будет быстрее, потому что + использует StringBuilder, который быстрее StringBuffer.

      А вообще советую этим товарищам открыть для себя QueryDSL.
      Ответить
      • мы тут недавно этот вопрос выясняли: конкатенацию константных строк выполняет компилятор.
        Ответить
        • а из-за двойных кавычек они не перестают быть константными? или только при появлении в них переменных?

          кстати у меня на работе ровнять код как минимум поощряется. видимо из-за того, что пишем на дельфи. видимо тарас руку приложил.
          Ответить
          • "Ровняю код наложением рук"
            Ответить
          • В одинарных кавычках в жабе может находиться только один символ ('a', 'b', но не 'ab'). Строки окружаются двойными кавычками. Автоподстановки строковых переменных ("Hello, ${user}!") в жабе нет, для этого нужно использовать String.format(template, args). Под константными строками я имел в виду строки, извесные на этапе компиляции (включая именованные константы). По идее все строки в жабе иммутабельны. Пример, когда конкатенацию не сможет выполнить компилятор:
            public String f(String p) {
                return "The param is " + p;
            }
            Тут p заранее неизвестно, и код будет преобразован компилятором в конструкцию
            public String f(String p) {
                return new StringBuilder("The param is ").append(p).toString();
            }
            Ответить
        • Строковых литералов.
          Ответить
          • Ну вот если не знаешь, зачем лезешь?
            $ cat Test.java
            public class Test {
                public static final String A = "Hello";
                public static final String B = "World";
                public static final String C = A + ", " + B + "!";
            };
            
            $ javap -constants Test.class 
            Compiled from "Test.java"
            public class Test {
              public static final java.lang.String A = "Hello";
              public static final java.lang.String B = "World";
              public static final java.lang.String C = "Hello, World!";
              public Test();
            }
            Ответить

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