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

    +137

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    void _device_ChangeStsConnect(bool Conn)								
    {
    	switch (Conn)
    	{
    		case true: Start(); break;
    		case false: Stop(); break;
    		default: break;
    	}
    }

    "Классический" switch булевой переменной.

    Запостил: Qetu107, 25 Ноября 2014

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

    • именование радует
      Ответить
    • А вдруг там NULL придёт.
      Или сисярп такого не позволит в данном случае?
      Ответить
      • Не, null вместо bool прийти не может. Это ж не похапэ.
        Ответить
      • NULL приходит и уходит, кушать хочется всегда.
        NULL приходит только если позволить ему придти:
        Как профессиональный говнокодер предлагаю такие варианты:

        1) ValueType -> ReferenceType
        void _device_ChangeStsConnect(object Conn)								
        {
        	switch (Conn.ToString())
        	{
        		case "True": Start(); break;
        		case "False": Stop(); break;
        		default: break;
        	}
        }

        2) ValueType -> NullableType
        void _device_ChangeStsConnect(bool? Conn)								
        {
                if (!Conn.HasValue) return false;
        	switch (Conn.Value)
        	{
        		case true: Start(); break;
        		case false: Stop(); break;
        		default: break;
        	}
        }
        Ответить
        • Null придти не может, bool это ValueType, если там поставить Nullable<bool> то да, а так не скомпилится.
          default мог взяться только из-за использования шаблонов кода switch, тем более что этот блок не достижим.
          Ответить
          • > default мог взяться только из-за использования шаблонов кода switch, тем более что этот блок не достижим.
            Не нужно искать скрытый смысл там, где имеет место быть обычная глупость.
            Код был написан вручную от банального незнания.
            Ответить
    • Не очень-то похоже, но, может быть, это была какая-нибудь студенческая лаба, в которой нужно было продемонстировать знание свитчей. Хотя... неговном этот код от этого не становится.
      Ответить
      • Не поверите, но это корпоративное ПО (для внутреннего использования).
        Ответить
    • Как профессиональный говнокодер предлагаю такие вариации:

      1) ValueType -> ReferenceType

      void _device_ChangeStsConnect(object Conn)								
      {
      	switch (Conn.ToString())
      	{
      		case "True": Start(); break;
      		case "False": Stop(); break;
      		default: break;
      	}
      }


      2) ValueType -> NullableType

      void _device_ChangeStsConnect(bool? Conn)								
      {
              if (!Conn.HasValue) return false;
      	switch (Conn.Value)
      	{
      		case true: Start(); break;
      		case false: Stop(); break;
      		default: break;
      	}
      }
      Ответить
      • Первый вариант ещё куда ни шло, но второй...
        Ответить
      • > if (!Conn.HasValue) return false;
        А свитч на null'е завалится или уйдет в default?
        Ответить
      • Как ещё более профессиональный, предлагаю заменить "True" и "False" на:
        case Boolean.TrueString:
        case Boolean.FalseString:
        Ответить
        • А в дефолтную ветку, само собой, вставить логирование.
          Ответить
    • Надо было так
      switch (Conn)
      	{
      		case true: Start(); break;
      		case false: Stop(); break;
      		default: /* something has gone terribly wrong */ throw new UnsupportedUniverseException();
      	}
      Ответить

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