1. JavaScript / Говнокод #5897

    +173

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    try {
        return JSON.parse(this.responseText)
    } catch (e) {
        throw e
    }

    паттерн "поддержка исключений" - если исключение всплывает - нужно его подтолкнуть, чтобы не потонуло х)

    Запостил: nin-jin, 05 Марта 2011

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

    • может заглушка, хз
      Ответить
    • Ну, так обычно делают, чтобы не парится с проверкой внутри какой-то функции.
      Без контекста не такой уж и говнокод
      Ответить
      • если имеет ввиду без контекста JSON.parse(this.responseText) - то да )
        Ответить
        • Э-э-э, а в каком контексте конструкция try { ... } catch (e) { throw e } не говнокод?
          Ответить
          • Если загуглить "rethrowing exception", то..
            Ответить
            • Можно реальный пример, пожалуйста?
              Ответить
              • А гугл фейковые примеры выдаёт?
                К тому же, http://code.google.com/intl/ru/query/#q=rethrow
                Ответить
                • На первой странице выдачи результатов поиска я такого говнокода не вижу.
                  Ответить
        • Ну, например, если данный код входит в состав в какой-то библиотеки, то чтобы самому автору библиотеки не заниматься тем, что ему не положено - он отправляет ошибку выше, к самому программеру (который хочет получить responseText).

          Короче говоря, абстракция и всего-то.
          Ответить
          • Чтобы самому не заниматься тем, чем не положено, достаточно просто не заниматься тем, чем не положено.
            Ответить
            • лол.
              Кстати неоднократно видел как в жабе пишут такое вот
              try{
              ...
              }catch(Exception e){
              throw new RuntimeException(e);
              }
              Ответить
              • а тут существенная разница. Во-первых, мы меняем класс исключения, во-вторых, RuntimeException не требует обьявления в throws. Так что все правильно, за исключением того, что ловить надо не сам Exception, а его потомков.
                Ответить
                • >Во-первых, мы меняем класс исключения
                  >во-вторых, RuntimeException не требует обьявления в throws.
                  спасибо кеп.
                  Ответить
              • Вот это имеет смысл -- пробросить проверяемое исключение сквозь вызовы функций, не содержащие в объявлении этих исключений. Всё равно это костыль -- лучше добавить эти исключения в объявления, но иногда это невозможно.

                И обычно лучше бросать не RuntimeException, а производное исключение, специфичное для приложения, чтобы иметь возможность поймать его отдельно. Но если всё, что нужно -- просто поймать и продиагностировать ошибку, то сойдёт.
                Ответить
          • Так зачем обвязка в виде try {} catch {} ? Без неё exception и так будет проброшено выше
            Ответить
            • UPD: А, понял.
              Ну, обычно не всё так просто, как показано в #5897, потому и написал я первый раз, что без контекста не очень ясно.
              Ответить
              • Приведите пример, когда не все так просто?
                Ответить
                • Ну скажем, если перед throw добавить какой-то код? Тот же вывод в консоль.

                  Ну или, если забыть, что это javascript, если у нас используются какие-то ресурсы/соединения, их тоже нужно закрыть, а функция в return'е это и будет делать.

                  В общем, если будут у меня когда-то реальные примеры — я допишу :)
                  Ответить
              • Если бы было не так просто -- говнокода бы не было.
                Ответить
    • таможенный досмотр
      Ответить

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