1. C# / Говнокод #5137

    +129

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    Exception Myex;
                    int responseVal = HelperMethods.DoPost(url, postdata, "text/xml; charset=utf-8", ref xmlResponse, null, out Myex);
                    XmlDocument xmlDoc = new XmlDocument();
                    xmlDoc.Load(new StringReader(xmlResponse));
    
                    string StatusID = xmlDoc.ChildNodes[1].ChildNodes[0].FirstChild.Value;
                    if (StatusID.ToLower() != "0")

    Последняя строка не может не радовать. Никогда не знаешь каким большим может быть ноль ...

    Запостил: Othello, 03 Января 2011

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

    • >Никогда не знаешь каким большим может быть ноль ...
      Уморил. :D
      Ответить
    • всё же можно было бы оставить лишь строки:
      if (StatusID.ToLower() != "0")
      и
      Exception Myex;
      остальное излишне
      Ответить
    • паранойя наверное :)
      Ответить
    • Раскажите непосвященному:
      Exception Myex;
      int responseVal = HelperMethods.DoPost(url, postdata, "text/xml; charset=utf-8", ref xmlResponse, null, out Myex);

      Myex здесь так создается/передается что бы DoPost() вместо бросания эксепшна, просто его возвращал в переменной?

      выглядит интересным компромисом для интерфейсов что бы эксепшены бросались опционально.
      Ответить
      • >вместо бросания эксепшна, просто его возвращал в переменной?
        да

        >Myex здесь так создается
        не создаётся, лишь объявляется
        будет создана лишь в DoPost, и то не обязательно
        если не создаст, то вернёт null
        Ответить
        • спа.

          и в лучших традициях ГК эта эксепшн после вызова не проверяется... ГК однозначно.
          Ответить
      • >выглядит интересным компромисом для интерфейсов что бы эксепшены бросались опционально
        не выглядит
        тогда теряется весь смысл исключений
        в таком случае проще вернуть экземпляр класса ошибки, код ошибки, или HRESULT

        на тот случай, если я не понял - можте привести пример для случая с интерфейсом
        Ответить
        • > на тот случай, если я не понял - можте привести пример для случая с интерфейсом

          (С++) у нас в некоторых интерфейсах народ передает в функцию выходным параметром строка. вызываемая функция, в случае ошибки ложит в строку сообщени(е,я) об ошибке. с одной стороны требования производительности не позляют всегда бросать эксепшены, с другой стороны в значении возвращаемым функцией нет дырок для индикации ошибки.

          вообщем, как бы у нас уже подобное говно испольнуется, только вместо эксепшена используется строка. меня привлекает возможность опционально бросать эксепшн ИЛИ не бросать эксепшн, но пользоватся тем же самым объектом (а не тупой строкой) для индикации ошибки.
          Ответить
          • >только вместо эксепшена используется строка
            если действительно беспокоит скорость, то возвращали бы код ошибки типа enum, а не строки
            это какая-то полумера
            как вы эти ошибки потом обрабатываете\ отлавливаете? неужели сравниваете строку на совпадение? Х_Х
            Ответить
            • > если действительно беспокоит скорость, то возвращали бы код ошибки типа enum, а не строки

              с перформансом там проблема что в некоторых реализациях С++ бросание эксепшенов очень дорого.

              народ не хочет напрягатся конвертацией enum -> sting, или какой GetLastError(), поэтому сразу возвращают строку.

              типа вместо эксепшен со строкой энкапсулированой, используется просто строка.

              > как вы эти ошибки потом обрабатываете\ отлавливаете? неужели сравниваете строку на совпадение? Х_Х

              если строка пустая, значит вызов функции был успешен. если не пустая - тогда ошибка и строка прямиком идет в лог. как правило если функция обломалась, тогда и вся транзакция обламывается.

              вообщем, на самом деле то строка не так далеко от эксепшена: по сути в 99% случаев из эксепшена берется только содержимое `getMessage();`. только что выглядит в коде говновато. можно даже было бы сделать что если строка есть NULL то бросать эксепшн. но в том коде нет (потому что не нужно было) своего класса эксепшена.
              Ответить
              • >с перформансом там проблема что в некоторых реализациях С++ бросание эксепшенов очень дорого.
                я знаю

                и всё же использование строк, как ошибок - это полумера и ошибка проектирования
                если однажды понадобится это переписать на другой механизм работы с ошибками - можно легко запариться
                Ответить
              • кстати, что под строки используете?
                самописный велосипед, std::string или указатель на символ (PxChar)?
                Ответить
                • многоколесный невилосипед:
                  std::list<std::string> &

                  да граблями там все разложено это факт.
                  Ответить
                  • ничего себе... этож что-то типа:
                    во врмя эксепшена происходит ещё 9ть и они все в десятером спускаются "до дна стека" о_О
                    С++ такого не позволяет
                    Ответить
                  • может лучше было сделать так:
                    CLog.Write("pizdec IO exception");
                    pizdecFlag=true;
                    return;
                    ?
                    Ответить
              • >GetLastError()
                злейшее зло
                многопоточные приложения при неверной реализации очень веселят в таких ситуациях
                Ответить
                • http://msdn.microsoft.com/en-us/library/ms679360(VS.85).aspx

                  Каждому свой last error
                  Ответить
                  • 1)Это WinAPI (я КЭП), а мы говорили про свою реализацию этой функции.

                    2)
                    >многопоточные приложения при неверной реализации очень веселят

                    Обратите внимание на выделенное слово. А я видел очень много не верных реализаций паттерна GetLastError.
                    Ответить
                    • показать все, что скрытоА зачем изобретать велосипед, кроме как в учебных целях? Может быть как раз это случай из того множества "не верных реализаций" ? Любая неверная реализация веселит, а не только для многопоточных применений. Но веселье заканчивается, когда возникает необходимость это отладить.
                      Ответить
                      • Какой велосипед? Это не велосипед. Это необходимость. Не у всех есть возможность использовать исключения, как, например, её не было у Dummy00001, о чём он нам только что поведал. Приходится как-то "выворачиваться", например, использовать паттерн GetLastError.
                        Ответить
                        • Может у Dummy00001 и была возможность использовать исключения, но мы ему поверим на слово и будем считать, что не было, что-бы не разводить лишние холивары.
                          Ответить
    • наконец холивар между сторонниками исключений и сторонниками флагов окончен!
      теперь мы исключение создаем, но не бросаем,а вовзращаем в качестве флага!
      Ответить
    • Да-а-а... Возвращать эксепшен, а не бросать - такого я и представить себе не мог!
      Ответить
    • показать все, что скрытоWEBKILL OTAKE111
      Ответить

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