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

    +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
    class MyException extends Exception {
    	/* конструкторы, геттеры-сеттеры и прочее-прочее */
    	
    	public void handle() { /* over 9000 строк */ }
    }
    
    class MyClass {
    	public void myMethod() {
    		try { /* ... */ }
    		catch (MyException e) {
    			e.handle();
    		}
    	}
    }

    исключение, которое обрабатывает, можно сказать, само себя, бред?

    Запостил: evg_ever, 06 Февраля 2014

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

    • А что,
      public void myMethod() {
      		try { /* пара строк */ }
      		catch (MyException e) {
      			/* over 9000 строк */;
      		}
      	}

      смотрелось бы лучше?
      Ответить
      • Набрасываешь на вентилятор - так набрасывай по полной ;)
        // а что,
        public void myMethod() {
            try { /* пара строк */ }
            catch (MyException e) {
                /* over 9000 строк */;
            }
        }
        public void myAnotherMethod() {
            try { /* пара строк */ }
            catch (MyException e) {
                /* еще over 9000 строк */;
            }
        }
        // смотрелось бы лучше?
        Ответить
        • Ну это само собой, но мне представилось лицо человека который читает "так, это у нас метод myMethod, он почему-то 9к строк занимает, разберемся. Так, вот мы сделали действие, вот мы начинаем обрабатывать исключение, ну оно меня не интересует, проматываем... проматываем... да когда ж оно кончится". И потом уберет эту непонятную обработку назад в исключение и будет всем говорить как упростил метод до двух строк.
          Ответить
          • > уберет эту непонятную обработку назад в исключение
            *facepalm.png*

            Ну неужели эту хрень нельзя отрефакторить или хотя бы убрать в обычный метод, а не сувать в исключение? Если исключению хватило контекста для устранения проблемы, то и обычному методу его хватит. И вообще, метод на 9к строк это ёбаный пиздец в любом случае, куда его не инкапсулируй...

            P.S. Я даже не представляю, что можно делать 9000 строк в обработчике исключения... Оно там структуру какой-нибудь базы что ли обновляет до текущей версии?
            Ответить
            • Если хватает контекста чтобы засунуть обработчик исключения в исключения, то зачем вообще его кидать вместо обработки на месте??
              Ответить
              • Ну как, а вдруг кто-то захочет обработать его другим способом, не вызывая handle? :)

                P.S. Ждем ОП'а, может быть он сжалится над нами, и расскажет, чего там умудрились наклепать на 9000 строк.
                Ответить
            • Ну вот из головы - Year2kException, а в обработчике - распилы и откаты исправление всех дат с двузначные на четырехзначные. И вполне логично, что handle размещен в exceptione (можно конечно было отдельный класс для него сделать, но тогда будет два класса вместо одного).
              Ответить
              • > исправление всех дат с двузначные на четырехзначные
                Мсье знает толк в извращениях...

                Заранее, в плановом порядке, накатить апдейт заменяющий двузначные на четырехзначные уже не судьба? :) Нафуя ждать до последнего?
                Ответить
                • Это не ко мне вопрос, просто пришло в голову как прикольный пример - объясняет почему 9000 строк и почему находится в исключении.
                  Ответить
            • как что
              sleep(10);
              sleep(10);
              sleep(10);
              sleep(10);...
              Ответить
      • я в итоге так и сделал *facepalm* правда, отрефакторил и вместо over 9000 получилось 36 строк без комментариев, но всё равно многовато
        Ответить
      • лучше
        Ответить
    • public void thr0w() throws MyException
      {
          throw this;
      }
      Ответить
      • public void handle() throws MyException
        Ответить
      • class Uncatchable extends Throwable {
        
            public Uncatchable() {
                throw this;
            }
        }

        Но хз будет ли работать.
        Ответить
        • Оу, я не видел, что выше уже опробовали... нда... странно, что оно работает :О
          Ответить

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