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

    +132.9

    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
    //  Этот метод проверяет, создано ли окошло лога, если не создано, то создает его
            public void CheckLogWnd()
            {
                try
                {
                    if (logWnd.IsAccessible)
                    {
                    }
                }
                catch
                {
                    logWnd = new LogWnd();
                }
            }

    Не помню как сделать это правильно :(

    Запостил: nolka4, 13 Октября 2009

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

    • не помню? или не знаю?
      желание выебнуться всеже сильнее ))
      Ответить
      • я на шарпе просто очень-очень давно писал, года 2 - 3 назад. Тогда таких проблем не было, но пхп разлагает.... Я правда не помню ?(
        Ответить
    • паходу try нужен для таво, еси када logWnd = null,
      такшо правильно будет примерно так (без эксепшенов):
      public void CheckLogWnd() {
      if(logWnd == null) logWnd = new LogWnd();
      }
      Ответить
    • за что минусуете-то? говнокод фееричен :) интересно, причем тут пхп - в нем что, нет null'ов? %)
      Ответить
      • Вообще да, говнокод жесткий )))
        а минусы, я думаю ставят потому что автор запалился что это его код.
        Если бы он сказал что это написали идиоты с его работы, то народ бы плюсы ставил.
        Ответить
        • та всё это фигня, плюсы, минусы... говонкод - есть говнокод, и циферка справа на это никак не влияет.
          Ответить
        • у меня еще и не такое есть :P
          Ответить
          • но его не покажу, потому что его много, и я его привожу в красивое состояние :)
            Ответить
    • А что здесб говнокодистого? Просто try\catch?
      Ответить
      • просто метод проверки слишком громоздкий
        Ответить
      • Как минимум за конструкцию catch {...} без указания типа исключения руки нужно сразу обрывать.
        Ответить
      • говнокодисто то что, при малейшей возможности, надо избегать явной генерации исключений, внимательно кодить с учётом возникновения возможных исключений... т.е. явно кодить так чтобы генерились исключения - нехорошо.
        розумеется, о тех исключениях, которые не зависят непосредственно от твоего кода речь не идёт, но и тут стоит быть окуратным.

        а в "catch {...}" нет ничё страшного, ведь это одно и то же, что "catch(Exception) {...}" када не нужна ссылка на экземпляр исключения. это тоже самое, что и ленивый "catch(...) {}" в C/C++.
        Ответить
        • //а в "catch {...}" нет ничё страшного, ведь это одно и то же, что "catch(Exception) {...}" када не нужна ссылка на экземпляр исключения. это тоже самое, что и ленивый "catch(...) {}" в C/C++.

          я тоже так считаю, поэтому везде где может вывалиться эксепшн, причем для меня не важно какой, я никогда не указываю его тип...
          Ответить
          • говнокод в том, что словиться здесь может только NullReferenceException (геттер IsAccessible, кидающий какие-то свои исключения - это за гранью разумного). и вместо обычного сравнения объекта с нуллом мы кидаем аж целое исключение %) лишний иф тоже умиляет, но это уже мелочи :)
            а catch {...} - это всегда говнокод, у нормального программиста не должно быть ситуаций, когда ему не важно, какой эксепшн вывалился и где.
            Ответить
            • это самый первый вариант был. Для начала оно должно работать, а шлифую код обычно когда основная часть написана... :) Спасибо за советы :)
              Ответить
            • ну а тогда как быть, если код может генерить херову тучю эксепшенов, и выброс любого из них означяет неуспешное выполнение всей операции? ты чё, будеш писать херову тучю "catch" блоков, и в каждом из них один и тот же код обработки исключительной ситуации?
              вот это действительно говнокод получется!
              ситуации, когда похер на тип эксепшена хоть и очень редки, но всётаки бывают.
              Ответить
              • Только в главном методе потока.
                Ответить
                • вообще стандартная практика - завести свой базовый класс исключения и оборачивать им все, что кидается из публичных методов классов. тогда в главном методе потока вместо
                  try { /*do something */ }
                  catch { alert("Произошла неведомая ебаная хуйня!"); }
                  будет примерно так:
                  try { /* do something */ }
                  catch (MyCoolException ex) {
                  alert("Произошла вот такая хуйня: " + ex.Message);
                  //пишем в лог, если опция включена
                  } catch (Exception ex) {
                  //программист мудак, но мы не хотим чтобы пользователь об этом узнал
                  alert("Произошла неведомая хуйня, обратитесь в поддержку.");
                  //пишем в лог
                  }
                  даже если нам не надо сообщать пользователю об ошибке, то ситуация, в которой вылетело что-то кроме MyCoolException является чем-то из ряда вон выходящим и достойна записи в логе :)
                  Ответить

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