1. Лучший говнокод

    В номинации:
    За время:
  2. Java / Говнокод #14405

    +74

    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
    38. 38
    39. 39
    if (myTransactions
            .get(i)
            .getTransactionType()
            .name()
            .compareToIgnoreCase(
                    com.mycompany.myproject.common.TransactionType.ENTER
                            .name()) == 0
            || myTransactions
                    .get(i)
                    .getTransactionType()
                    .name()
                    .compareToIgnoreCase(
                                com.mycompany.myproject.common.TransactionType.ENTER_AGAIN
                                        .name()) == 0) {
    
        BigDecimal fee = myTransactions.get(i).
                .getAmount().subtract(
                        myTransactions.get(i)
                                .getContribution());
    // ...
    }
    
    // Notes by Wissenstein
    //
    // package com.mycompany.myproject.common;
    // public enum TransactionType {
    //     ENTER, ENTER_AGAIN, GET, GIVE
    // }
    // ...
    // public class Transaction {
    // ...
    //     public TransactionType getTransactionType() {
    // ...
    //     }
    // }
    // ...
    // List<Transaction> myTransactions;
    // ...
    // P.S. Идентификаторы изменены.

    К тому, что myTransactions.get(i) повторяется, я уже привык и рефакторю это одним махом.
    Однако использованный здесь метод сравнения значений типа enum меня озадачил…

    wissenstein, 23 Января 2014

    Комментарии (0)
  3. Java / Говнокод #14230

    +74

    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
    for (int i = 0; i != nl.length(); i++)
    {
        out.write(nl.charAt(i));
    }
    
    for (int i = 0; i != footerStart.length(); i++)
    {
        out.write(footerStart.charAt(i));
    }
    
    for (int i = 0; i != type.length(); i++)
    {
        out.write(type.charAt(i));
    }
    
    for (int i = 0; i != footerTail.length(); i++)
    {
        out.write(footerTail.charAt(i));
    }
    
    for (int i = 0; i != nl.length(); i++)
    {
        out.write(nl.charAt(i));
    }

    Зачем писать функцию, когда можно успешно копипастить циклы

    http://grepcode.com/file/repo1.maven.org/maven2/org.bouncycastle/bcpg-jdk16/1.45/org/bouncycastle/bcpg/ArmoredOutputStream.java

    roman-kashitsyn, 15 Декабря 2013

    Комментарии (10)
  4. Java / Говнокод #13968

    +74

    1. 1
    if (!(bundle == null))

    byob, 18 Октября 2013

    Комментарии (13)
  5. Java / Говнокод #13933

    +74

    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
    public class Encoder {
    	public static void encode(final OutputStream out, Node node) throws IOException {
    		node.accept(new NodeVisitor() {
    			@Override
    			public void string(StringNode node) {
    				byte[] value = node.toByteArray();
    				out.write(Integer.toString(value.length).getBytes(Constants.CHARSET));
    				out.write(':');
    				out.write(value);
    			}
                            // ... другие методы для других типов нод ...
                    }
            }
    }

    Решил поменять в паре-тройке модулей пачки ифов на паттерн visitor... И получил пинка от жабы ;(

    write() кидает IOException, а значит и метод string() в анонимном классе тоже должен кидать, и метод string() в интерфейсе NodeVisitor тоже... Но ведь соседним посетителям этот IOException нахер не сдался...

    Checked exceptions - зло.

    bormand, 12 Октября 2013

    Комментарии (55)
  6. C++ / Говнокод #13398

    +74

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    Дорогой участник! Не спеши покидать страницу. Я прошу тебя помочь:
    не поленись, пройдись по всем постам, и поставь каждому участнику по минусу;
    минусуя других участников ты воспитываешь в себе чувство меры и помогаешь обществу снижать ЧСВ. 
    Заранее спасибо, друг мой. Ты будешь вознагражден за это деяние!
    
    Тот, кто покинул страницу, но не выполнил моей просьбы, умрет через 9 дней.

    Дорогой участник! Не спеши покидать страницу. Я прошу тебя помочь:
    не поленись, пройдись по всем постам, и поставь каждому участнику по минусу;
    минусуя других участников ты воспитываешь в себе чувство меры и помогаешь обществу снижать ЧСВ.
    Заранее спасибо, друг мой. Ты будешь вознагражден за это деяние!


    Тот, кто покинул страницу, но не выполнил моей просьбы, умрет через 9 дней.

    Stertor, 11 Июля 2013

    Комментарии (41)
  7. C++ / Говнокод #13388

    +74

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    Дорогой участник! Не спеши покидать страницу. Я прошу тебя помочь:
    не поленись, пройдись по всем постам, и поставь каждому участнику по минусу;
    минусуя других участников ты воспитываешь в себе чувство меры и помогаешь обществу снижать ЧСВ. 
    Заранее спасибо, друг мой. Ты будешь вознагражден за это деяние!
    
    Тот, кто покинул страницу, но не выполнил моей просьбы, умрет через 9 дней.

    Дорогой участник! Не спеши покидать страницу. Я прошу тебя помочь:
    не поленись, пройдись по всем постам, и поставь каждому участнику по минусу;
    минусуя других участников ты воспитываешь в себе чувство меры и помогаешь обществу снижать ЧСВ.
    Заранее спасибо, друг мой. Ты будешь вознагражден за это деяние!


    Тот, кто покинул страницу, но не выполнил моей просьбы, умрет через 9 дней.

    Stertor, 11 Июля 2013

    Комментарии (0)
  8. Java / Говнокод #12686

    +74

    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
    private boolean userInOneRegistrationNode() throws DfException {
    
            String uname = OrganizationStaffStructureHelper.getCurrentUserName();
    
            int i = 0;
            IDfCollection NodesCol = DQLHelper.getCollection(DQL_GET_REGISTRATOR_DIV, new String[]{uname});
            while (NodesCol.next()) {
                if (!(NodesCol == null)) {
                    String group_name = NodesCol.getString(GROUP_NAME);
                    i = i + 1;
                }
            }
    
            if (i == 1) {
                return true;
            }
            return false;
    }

    Заменяется 2мя строками один - select count(*), вторая - полученный результат Integer.ValueOf(...).

    Landing, 04 Марта 2013

    Комментарии (3)
  9. Java / Говнокод #12599

    +74

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    private String stateChangedReason;
    ...
    
    if (stateChangedReason != null && stateChangedReason instanceof String) {
                dealerManageInfo.setChangeStateReason(stateChangedReason.toString());
    }

    amarfey, 15 Февраля 2013

    Комментарии (14)
  10. Java / Говнокод #12366

    +74

    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
    @Override
    protected void onResume() {
        super.onResume();
        logUpdateTimer = new Timer();
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        TextView tv = (TextView)findViewById(R.id.logsView);
                        tv.setText(LogBuffer.getLogs());
                    }
                });
            }
        };
        logUpdateTimer.schedule(task, 0, 1000);
    }

    Собрался с силами и высрал реализовал свою задумку - уведомлялку о новых комментах на ГК под Андроид.
    Проверяет сток каждые 5 минут, если увидит новый коммент - вибрирует и моргает светодиодом, при клике по уведомлению открывает сток в браузере.

    https://github.com/bormand/govnotify

    P.S. Вопрос к явистам - можно вон то говнище, которое я привел в топике, как-то попроще записать?

    bormand, 26 Декабря 2012

    Комментарии (22)
  11. Java / Говнокод #12183

    +74

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    private static class NullReader extends Reader {
        public int read(char[] cbuf, int off, int len) {
            return 0;
        }
        public void close() {}
    }

    Однажды понадобилось работать с модулем, который что-то читает с помощью StreamTokenizer, но вместо реального файла подсовывать ему что-то своё, генерируемое на ходу, и при этом быть в курсе, какое место он сейчас читает. Решил пронаследоваться от StreamTokenizer и переопределить ему nextToken(). Оказалось, что у StreamTokenizer нет пустого конструктора, надо обязательно вызвать super и передать туда какой-нибудь Reader. Попробовал передавать null - оказалось, что в его конструкторе стоит проверка, которая сразу кидает NullPointerException. Блин, зачем ему Reader, если он к этому Reader никогда не обратится, ведь я nextToken переопределил! Пришлось сделать свой Reader-заглушку. Но чтобы пронаследоваться от абстрактного Reader, нужно обязательно определить методы read и close. Вот такая шняга в итоге получилась. Недавно случайно открыл код на этом месте и долго на неё пялился :-)

    GoblinAlchemist, 23 Ноября 2012

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