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

    +80

    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
    private static final char DELIM = '_';
    
    public String createDocName() {
        ...
        final String sDelim = Character.toString(DELIM);
        String res = stringWithDelimiter(docType) + stringWithDelimiter(docNumber) + stringWithDelimiter(docDate) + stringWithDelimiter(documentReceiptDate);
        res = res.length() < sDelim.length() ? "" : res.substring(0, res.length() - sDelim.length());
        res = res.replace(sDelim + sDelim + sDelim, sDelim);
        res = res.replace(sDelim + sDelim, sDelim);
    
        if (res.charAt(0) == DELIM)
          res = res.substring(1);
    
        if (res.charAt(res.length() - 1) == DELIM)
          res.substring(0, res.length() - sDelim.length());
        
        return res;
    }
    private String stringWithDelimiter(Object o) {
        final String sDelim = Character.toString(DELIM);
        String s = (String) o;
        return StringUtils.isNotEmpty(s) ? s + sDelim : sDelim;
    }

    метод createDocName должен из нескольких полей документа составить имя документа, используя в качестве разделителя "_".
    Сначала я не мог предположить что делает этот код, но подсказал коллега по работе:
    потензицально, вызов String res = stringWithDelimiter(docType) + stringWithDelimiter(docNumber) + stringWithDelimiter(docDate) + stringWithDelimiter(documentReceiptDate) ; может давать запись например такую: "docType___" - в случае если docNumber, docDate и documentReceiptDate будут пустыми строками (а можно получить и "___documentReceiptDate".
    НО, предусмотрительный разработчик позаботился об это проблеме!
    Он заменяет, "___" и "__" с помощью:
    res = res.replace(sDelim + sDelim + sDelim, sDelim);
    res = res.replace(sDelim + sDelim, sDelim);
    Затем удаляет знаки подчеркиваний в начале и в конце строки:
    if (res.charAt(0) == DELIM)
    res = res.substring(1);
    if (res.charAt(res.length() - 1) == DELIM)
    res.substring(0, res.length() - sDelim.length());

    Отличное решение, можно было бы конечно переписать метод stringWithDelimiter, чтобы он не дописывал "_" для пустых строк, но это ведь не так круто правда? Жаль только что придется этот класный код снова переписывать если вдруг измениться число параметров, или поменяется разделитель...

    LexeY4eg, 23 Ноября 2011

    Комментарии (0)
  2. JavaScript / Говнокод #8612

    +153

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    if (!field.parentElement.childNodes[0].checked)
    {
    getElementByFieldName("Original").parentNode.childNodes[0].disabled = true;
    getElementByFieldName("Duplicate").parentNode.childNodes[0].disabled = true;
    ...

    Далее идет ещё примерно 20 аналогичных обращений, аля parentNode.childNodes[0]
    Очень читабельный и понятный код! :)

    LexeY4eg, 23 Ноября 2011

    Комментарии (20)
  3. Python / Говнокод #8611

    −100

    1. 1
    2. 2
    3. 3
    4. 4
    class SomeThing(object)
        def _get_value(self):
            return #return some value
        get_value = property(_get_value)

    Декораторы? не не слышал.

    Zapix, 23 Ноября 2011

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

    +81

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    Date date = (Date)value.getParam("DocReceiptDate");
        if (date.getHours() == 24) {
          date.setHours(0);
        }
        String documentReceiptDate = (new SimpleDateFormat("dd.MM.yyyy.kk.mm")).format(date);

    Элегантная попытка форматирования даты.
    Задача было вместо 24 часов писать 00, например не "24.11.2011.24.23", а "24.11.2011.00.23".
    Как все уже догадались, следовало просто использовать формат "dd.MM.yyyy.HH.mm".

    LexeY4eg, 23 Ноября 2011

    Комментарии (1)
  5. PHP / Говнокод #8609

    +147

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    } catch (PDOException $e)
                {
                print_r($e->__toString());
                die();
                }

    sectus, 23 Ноября 2011

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

    +146

    1. 1
    for (int i=0, N=sizeof(a)/sizeof(int); ++i<N-1; s+=(int)(a[i]>a[i-1]&&a[i]>a[i+1]));

    Это говнокод или годный троллинг? Топик http://forum.codenet.ru/threads/69046-Помогите-задача-С/

    mrxak, 22 Ноября 2011

    Комментарии (13)
  7. JavaScript / Говнокод #8607

    +145

    1. 1
    i=i++;

    AjiTae, 22 Ноября 2011

    Комментарии (4)
  8. Pascal / Говнокод #8606

    +100

    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
    var s: string;
        res: string; 
    begin
      readln(s);
      res := 'Слишком большая строка';
      if length(s) = 0 then res := s;
      if length(s) = 1 then res := s;
      if length(s) = 2 then res := s;
      if length(s) = 3 then res := s;
      if length(s) = 4 then res := s[0] + ' ' + s[1] + s[2] + s[3];
      if length(s) = 5 then res := s[0] + s[1] +' ' + s[2] + s[3] + s[4];
      if length(s) = 6 then res := s[0] + s[1] + s[2] +' ' + s[3] + s[4] + s[5];
      if length(s) = 7 then res := s[0] + ' ' + s[1] + s[2] + s[3] +' ' + s[4] + s[5] + s[6];
      if length(s) = 8 then res := s[0] + s[1] + ' ' + s[2] + s[3] + s[4] +' ' + s[5] + s[6] + s[7];
      if length(s) = 9 then res := s[0] + s[1] + s[2] + ' ' + s[3] + s[4] + s[5] +' ' + s[6] + s[7] + s[8];
      writeln(res);
    end.

    Код масштабируемый - сейчас он обрабатывает строки, в которые можно записать от нуля до девяти символов, но его прозрачно можно смасштабировать до обработки хоть 20, хоть 50 символов.
    Кроме того, тут не используются платформозависимые API.

    Govnocoder#0xFF, 22 Ноября 2011

    Комментарии (26)
  9. PHP / Говнокод #8605

    +154

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    // сохраняем лог
    $log = fopen($logfile,'w'); // открыли файл, стерев его
    foreach($temp as $tmp) {fwrite($log,trim($tmp)."n");} // каждый элемент массива записали в строку
    fclose($log); // закрыли лог
    ?>

    Зачем мне implode и file_put_contents?
    У меня нет времени, чтобы ебаться с ними! Лучше я создам цикл.

    http://forum.htmlbook.ru/index.php?showtopic=7169
    На это ссылка в топ-теме причем.

    7ion, 22 Ноября 2011

    Комментарии (7)
  10. Python / Говнокод #8603

    −85

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    def __getattr__(self,name):
            if name == '_creator':
                 return 'Article'
            else:
                 raise AttributeError

    H1D, 22 Ноября 2011

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