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

    +122

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    List<String> el=parseList();
    		Theme th=new Theme(id);
    
    		th.setScore=Integer.parseInt(el.get(1));
    		th.setComments=Integer.parseInt(el.get(2));
    		th.setAuthor=el.get(3);
    		th.setVisitors=Integer.parseInt(el.get(4));
    		th.setVisitorsLastWeek=Integer.parseInt(el.get(5));
    		th.eMail=el.get(5);
    		return th;

    Запостил: 3.14159265, 12 Октября 2010

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

    • какую-то херню по памяти запостил. вот нашел исходник
      List<String> el=parseList();
      Theme th=new Theme(id);
      th.setScore (Integer.parseInt(el.get(1)));
      th.setComments  (Integer.parseInt(el.get(2)));
      th.setAuthor (el.get(3));
      th.setVisitors (Integer.parseInt(el.get(4)));
      th.setVisitorsLastWeek(Integer.parseInt(el.get(5)));
      th.setEMail (el.get(6));
      return th;
      Ответить
      • мне такого народ в прошлом много показывал. один универский препод сидел исключительно на Жабе и в принципе обработку ошибок не делал, чему и студентов учил. он из цикла перебора массива по эксепшену выходил.... o_O
        Ответить
        • в жабе это тоже не бестпрактис между прочим. Блох (один из авторов жабы как бы) писал что exception это исключительная, неожиданная ситуация, и строить на ней логику не нужно.
          Кроме того в старых жабах это была еще и медленная операция, потому что считается что в нормальной программе исключений или нет совсем или очень мало
          Ответить
          • насколько я понял пост Dummy00001. он тоже не в восторге от такого уебанства, что косвенно подтверждает смайлo_O
            Ответить
            • я имел ввиду что жаба не виновата
              Ответить
              • отчасти ИМО виновата и сама Жаба.

                в С++ хуйни нахуячил -> прога в корку -> кастомеры телефонируют, на жизнь жалуются.

                а Жабе чего не городи, все
                catch(Exception e)
                фиксится.
                Ответить
                • Это может быть не таким уж и плохим приемом, если в этом месте выводится лог.
                  Лог можно направить на мыло разработчику. Это лучше, чем просто упавшая программа.

                  Во многих программах в случае падения предлагается отправить отчет разработчику.
                  В жабе это реализуется приведенным выше примером.

                  Это единственный случай в мире, когда catch(Exception) является не говнокодом.
                  Правда нужно быть осторожным, что бы не поймать ThreadInterruptedException например.

                  В конце концов в винде тоже есть SEH :)
                  Ответить
                  • альтернатива эксепшнам есть, это флаги, и, как вариант, мэтчи. Особенностью (как преимуществом, так и недостатком) эксепшнов является отложенная обработка. Т.е., эксепшн я могу тут же словить и обработать, или дать ему полетать по стеку вплоть до креша проги. Тогда как флаги и мэтчи я обязан проверять сразу.
                    Плюс мэтчингового подхода в том, что мне не дадут написать программу, которая просто вылетит.
                    Минус состоит в том, что код необоснованно распухает.

                    Поэтому catch(Exception) не является говнокодом, но его употребление обязано привлекать внимание каждый раз, с вопросом - а не раздробить ли его для более тщательного анализа ошибок.


                    но вообще, кажись, мы приехали к проблеме языкового проектирования. Опыт показывает, что есть решения хорошие, есть не очень, но идеального быть не может - поэтому каждый подход имеет право кому-то нравиться.
                    Главное: что бы программист знал узкие места своего любимого приема и не лажался.
                    Ответить
          • имеется ввиду, что
            if(a!=null) a.b() else a.c();

            и яснее, и быстрее, чем
            try {
             a.b();
            } catch(NullPointerException e) {
             a.c();
            }

            на примере сразу видно какое-то внеземное мышление.

            по описанию "он из цикла перебора массива по эксепшену выходил.... o_O" самый наивный код
            int[] a=new int[10];
             int i=0;
             while(true) {
              try {
               b=a[i];
              } catch(ArrayIndexOutOfBoundsException e) {
                break;
              }
              i++;
             }

            выглядит придурочно.
            Ответить
            • безусловно. Для этого как-бы есть .lengtjh)
              Ответить
            • лол, как в тему!
              мне только вчера рассказывали о недопустимости проверок (на налл например) и хорошей практике программирования эксепшенами.

              щас ссылочкой на говнокод заделюсь.
              Ответить
              • ох, я жажду пример "хорошей практики" с аргументацией ))))
                Ответить
              • пардон, пример должен быть
                if(a!=null) a.b(); else с.b();
                
                try {
                 a.b();
                } catch(NullPointerException e) {
                 c.b();
                }


                иначе ко мне придерутся, что пример нерабочий, эксепшн вылетает
                Ответить
    • Нужно было использовать фабрику? или что-то другое?
      Ответить
      • думаю, что по-хорошему декларативную валидацию средствами какого-нибудь фреймворка, типа Стратсов.
        или тут говно в том, что захардкожен порядок параметров, и следует заюзать hashMap для параметров?
        Ответить
        • hashMap. Это как хранить энумы в базе в виде ORDINAL
          Ответить
      • 2 Dummy00001
        >сидел исключительно на Жабе и в принципе обработку ошибок не делал
        а причем тут это? проверка может стоять в методе, который дергает сие.

        2 medb
        >Нужно было использовать фабрику? или что-то другое?
        а причем тут фабрика? если работаем с SQL-ником - ORM.

        2 Мистер Хэнки
        >говно в том, что захардкожен порядок параметров
        да в том что они распихиваются именно таким тупым способом

        >и следует заюзать hashMap для параметров?
        а вот отсюда поподробнее - я не понял.

        ЗЫ походу Страйкер домен проплатил.
        Ответить
    • хорошо хотя бы что Integer.parseInt() а не new Integer()
      Ответить

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