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

    +73

    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
    if (!policyIds.isEmpty()) {
        AtomicInteger recordCount = new AtomicInteger(0);  // <- WTF?!!!!
        try {
            for (final BigDecimal policyId : policyIds) {
                helper.processPolicy(policyId.longValue(), /* ещё 7 параметров */ recordCount);
            }
        } catch (IOException e) {
                    // код обработки исключения опущен
        }
        saveToFile(ctx, fileName, outputStream.toByteArray(), recordCount);
    }
    
    // А вот что делает helper.processPolicy
    if (selector.matches(policy)) {
        if (processRequestImpl(policy, ctx, fileName, outputStream, ioService, outputDir, applicationContext)) {
            recordCount.getAndAdd(1);
        }
    }

    Integer иммутабелен? Не проблема!

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

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

    • А в Java есть передача параметров по ссылкам?
      Ответить
      • Примитивы передаются по значению, объекты - по ссылке.
        Зато методы могут возвращать значения.
        К слову, AtomicInteger должен использоваться там, где есть многопоточность.
        Ответить
        • А в С# есть, бебебе...
          void processPolicy(long policyId, /* ещё 7 параметров */ , ref int processedRecordCount);
          Возвращать значения, конечно, можно, разве что не всегда наглядно:
          void processPolicy(ref int processedRecordCount);
          или
          int processPolicy();
          Ответить
        • >Зато методы могут возвращать значения.
          Нихера себе блин. Круто.
          "Я хочу чтобы вы сделали язык. Суть такова. ...<skip> ... Можно возвращать значения из методов."
          Ответить
    • а почему policyId - BigDecimal? oO?
      Ответить
    • AtomicInteger? вау, конкурентное программирование
      Ответить
      • Да, это первое, что приходит на ум, я тоже начал искать треды. Но нет, здесь нужна мутабельность AtomicInteger. Человек по непонятной причине размазал ответственность одного класса по двум, отсюда девять параметров в вызове метода и передача мутабельных чисел. Рефакторинг решил проблему.
        повторяю: передача по ссылке не нужна
        Ответить
        • new int[1]
          Ответить
          • Да не нужен там мутабельный инт, проблема в размазанной ответственности: передавать 9 параметров в методе - это ненормально.
            Ответить
            • Если приходит более трех параметров, то метод уже дурно пахнет.
              Но 9 это далеко не предел. Где-то на сайте был пост с 33-ю параметрами в конструкторе.
              Ответить

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