1. Список говнокодов пользователя TAX

    Всего: 5

  2. Java / Говнокод #16200

    +75

    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
    public void onBackPressed() {
    	if (getSupportFragmentManager().getBackStackEntryCount()==0 || getSupportFragmentManager().getBackStackEntryCount()==1) { 
    							finish();
    							android.os.Process.killProcess(android.os.Process.myPid());
    							((MainActivity)instance).onDestroy();
    	}
    }
    
    /* чуть дальше */
    
                JSONObject jsonObjectA = null, jsonObjectB = null;
                try {
                    jsonObjectA = new JSONObject(a.toString());
                    jsonObjectB = new JSONObject(b.toString());
                } catch (JSONException e1) {
                    e1.printStackTrace();
                }
    
                if ((jsonObjectA != null || jsonObjectB != null) || (jsonObjectA != null && jsonObjectB != null)) {
                    try {
                        valA = jsonObjectA.getString("name");
                        valB = jsonObjectB.getString("name");
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }

    Первый фрагмент кода - это больше специфика Android - при нажатии кнопки назад: закрыть приложение, убить процесс и дернуть метод onDestroy() который в норме должен автоматом вызваться при закрытии приложения но не вызывается из-за того что мы убиваем процесс. Про то что условие if можно оптимизировать я умолчу.

    На if() во втором фрагменте заглючил даже встроенный в intelliJ Idea инструмент рефакторинга...

    TAX, 20 Июня 2014

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

    +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
    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
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    // Current Month Days
                for (int i = 1; i <= _nDaysInMonth; i++) {
                    if (_myPrefs.getIfConfigured()) {
                        if (_regionWithHolidays != null && _regionWithHolidays.length > 0) {
    
                            String holidayDateStringFormat = String.valueOf(i) + "-" + getMonthAsString(nCurrentMonth) + "-" + _strCurrentSelectedYear;
                            for (int index = 0; index < _regionWithHolidays.length; index++) {
                                if (_regionWithHolidays[index].getHolidayDate().equals(holidayDateStringFormat)) {
                                    list.add(String.valueOf(i) + "-RED" + "-" + getMonthAsString(nCurrentMonth) + "-" + yy);
                                }
                            }
                        }
                    }
    
                    if (i == getCurrentDayOfMonth()) {
                        list.add(String.valueOf(i) + "-BLUE" + "-" + getMonthAsString(nCurrentMonth) + "-" + yy);
                    } else {
                        list.add(String.valueOf(i) + "-WHITE" + "-" + getMonthAsString(nCurrentMonth) + "-" + yy);
                        if (_myPrefs.getIfConfigured()) {
                            if (_regionWithHolidays != null && _regionWithHolidays.length != 0) {
                                String otherDates = String.valueOf(i) + "-" + getMonthAsString(nCurrentMonth) + "-" + _strCurrentSelectedYear;
                                for (int index = 0; index < _regionWithHolidays.length; index++) {
                                    if (_regionWithHolidays[index].getHolidayDate().equals(otherDates)) {
                                        list.remove(String.valueOf(i) + "-WHITE" + "-" + getMonthAsString(nCurrentMonth) + "-" + yy);
                                    }
                                }
                            }
                        }
                    }
                }
    
                // some code
    
                for (int i = 1; i <= _nDaysInMonth; i++) {
                    String[] day_color = list.get(i).split("-");
                    if (day_color[1].equals("WHITE")) {
                        //active dates in current month
                        dayNumberView.setTextColor(getResources().getColor(R.color.darkGrey_font));
                    } else if (day_color[1].equals("BLUE")) {
                        //current date in current month
                        holder.tvTime.setTextColor(getResources().getColor(R.color.whitetranslucent));
                        dayNumberView.setTextColor(getResources().getColor(R.color.whitetranslucent));
                        cell.setBackgroundResource(R.color.blue_font);
                    } else if (day_color[1].equals("RED")) {
                        //active dates in current month
                        dayNumberView.setTextColor(getResources().getColor(R.color.red));
                    }
                }

    Это приложение с десятками тысяч пользователей. Мне выпала честь править в нем баги. На сколько я могу судить задача этого куска была отобразить календарь на текущий месяц на экране и подсветить WHITE - обычные дни, BLUE - текущий, RED - выходные и праздничные. Итак в чем соль:
    1) сама соль метода - в одном цикле создается список строк вида НОМЕР-ЦВЕТ-МЕСЯЦ-ГОД, чуть ниже в аналогичном цикле эти строки разбиваются по "-" и сравнивается по строковому значению цвета. Кроме того день может быть или текущим или праздничным, но никак не одновременно.
    2) два практически одинаковых куска кода по 10 строк - строки 4-13 и 19-28, первый при определенных условия добавляет ПРАЗДНИЧНЫЙ день в календарь, потом день в 16-18 строках день всегда добавляется еще раз этот день, либо обычный(WHITE) либо текущий(BLUE), и выполняется второй кусок и если проходят те же условия т.е. фактические если был добавлен праздничный день(RED) то удаляется добавленный ОБЫЧНЫЙ день. Баг был в том что если текущий день был еще и праздничным то они задваивались. Сделать по нормальному - если день уже добавлен, не добавлять еще раз или сделать continue главному циклу. Не говоря уже о том чтобы добавить break после 9 строки, видно автор не знал про эти операторы.

    TAX, 19 Июня 2014

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

    +102

    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
    begin
      tru:=false;
      if    tru=false then
      begin
        ObrMatritsa(Sigm,Sigm_transp);
        tru:=true;
        det:=abs(Determinant(Sigm));
        if det=0 then
        begin
          ShowMessage('Determinant = 0');
          tru:=false;
          Application.Terminate;
          exit;
        end;
        //if  det=0 then begin result:=0 ; exit end;
        sum:=1/sqrt(power(2*pi,kol_prizn)*det* exp(Mas));
        if  sum=0 then result:=0 ;
      end else exit;
    end;

    TAX, 30 Декабря 2009

    Комментарии (26)
  5. Pascal / Говнокод #2353

    +92

    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
    {$R-}
    fal:=true;
    ty:= length(mas1);
    while(fal=true)  do
      for j:=0 to kp-1 do
      begin
        for i:=i+k+j to length(mas2)-1 do
        begin
          while mas2[i+k]= ty do
          begin
            s:=s+c[i,j];
            inc(k);
          end;
        end;
        nl:=mas1[ty-1];
        if nl=0 then
          mas_Mj[ty]:=0
        else
          mas_Mj[ty-1][j]:=s/nl;
        s:=0;
      end;

    TAX, 30 Декабря 2009

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

    +106.6

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    if WordCount>GetWord(i) then else if WordCount>GetWord(i) then
      begin
        // ...
        // ...
      end;

    при каких условиях выполнится код между begin-end?..

    TAX, 26 Декабря 2009

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