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

    +134

    1. 1
    2. 2
    3. 3
    class UnathorizedDevice : ArgumentException { public UnathorizedDevice() : base() { } }
    
    class LocalException : ArgumentException { public LocalException(string message) : base(message) { } }

    Говно или не говно? Мне кажется первое

    Запостил: Smekalisty, 19 Августа 2014

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

    • Мало-ли как это должно в коде обрабатываться...
      Может, на разные типы исключений запланировано разное поведение.

      В принципе, даже отнаследовано правильно.
      Т.к., помнится, ещё давно читал статью, что наследовать исключения желательно от исключений пользовательского уровня, а не от базового класса исключений.

      Т.е. в оригинале, автор написал даже грамотнее, чем вод этот хардкор:
      http://msdn.microsoft.com/en-us/library/87cdya3t%28v=vs.110%29.aspx
      Ответить
      • >>Т.к., помнится, ещё давно читал статью, что наследовать исключения желательно от исключений пользовательского уровня, а не от базового класса исключений.
        Не, дело не в том, от кого наследоваться в исключениях, а в том, что наследоваться нужно чтобы что-то переопередлить или добавить, а не наследование ради наследования.
        Ответить
        • try{
          	// Some code
          }catch(UnathorizedDevice exc) {
          	System.Diagnostics.Trace.TraceInformation(String.Concat("We have UnathorizedDevice: ",exc.Message));
          }catch(ArgumentException exc) {
          	throw new System.ComponentModel.WarningException("Whoa!", exc);
          }
          Ответить
    • Имхо не говно. свое исключение в коде лучше безликого Exception.

      Да и отлаживать проще - сразу знаешь откуда исключение - из стандартной либы или из твоего кода
      Ответить
      • Ага давай теперь на каждый случай генерировать свой тип. Будет у тебя 100500 таких классов в приложении. Бред.
        Для этого и есть базовый класс и есть сообщение в нем
        Ответить
        • Ага, давай теперь утрировать. Ага, давай теперь на каждый случай генерировать свой тип.
          Сгенерируй, сгенерируй его еще раз!
          Пиши свою узкоспециализированную либу с общими исключениями, что бы нихуя не понимал, почему оно упало. делаешь нех, и вдруг внутри произошла ошибка вычислений? Выкидывай ArithmeticException без обьяснений! Это же такое ожидаемое поведение! Видишь, я тоже утрирую! Я живу полноценной жизнью!
          Ответить
    • Нашел применеие исключения, оно еще эпичнее
      try
      {
      // 140 строк кода, где-то в середине
      if (что-то)
      throw new UnathorizedDevice();
      }
      catch (UnathorizedDevice)
      {
      G.PrintRed("Unathorized {0}", info);
      }
      Сам кидаю, сам ловлю!
      Ответить
      • Expection handling.
        Ответить
      • паттерн супер иф
        Ответить
        • Это такой элегантный вариант обхода использования goto.
          Ведь, взрослые дяди учили, что goto использовать нехорошо.
          Ответить
          • Можно было 2 метода завершения сделать и передать им выполнение по ифу. Goto нинужно
            Ответить
            • >Можно было 2 метода завершения сделать и передать им выполнение по ифу.
              Ну, да, throw как-бы подразумевает, что его поймают выше по стеку.
              А не в текущем методе...

              >Goto нинужно
              Раз всё ещё не отказались, значит всё ещё нужен (И это касается не только switch/case).
              http://stackoverflow.com/questions/6545720/does-anyone-still-use-goto-in-c-sharp-and-if-so-why
              Но и шанс перекусить макаронами повышается...
              Ответить
            • Можно ещё return и мутабельность выпилить. Вам, математикам, всё бы заменить универсальным эквивалентом :)
              Ответить
              • return можно оставить - для монад пригодится
                Ответить
                • Опошлили return... Тут вполне бы подошло название liftM0.
                  Ответить
                  • А чем тебе не нравиться return? Вернуть значение в заданном контексте. Хотя liftM0 тоже неплохо
                    Ответить
                    • return дразнит императивного программиста, а сам лишь поднимает в мир монад :) А так, в общем-то, и не мешает, поскольку на хаскеле не пишу.
                      Ответить
                  • > Тут вполне бы подошло название liftM0
                    Обычно это называют unit, в Applicative есть неплохая алтернатива - pure (т.к. под Unit уже принято подразумевать ()).
                    Ответить
    • показать все, что скрытоЯ, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:
      Ответить
      • Что вот за такую хуйню гости и могут писать только три дня в неделю.
        Ответить
        • Семь раз отмерь — один раз отрежь себе x**, guest!
          Ответить
    • Хорош постить хуйню. Автор - долбоеб.
      Ответить
    • Именование, конструкторы и базовый класс - эт да)))
      Ответить

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