Си диез / Говнокод #2029 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
public static string ResultToString(long Result)
        {
            switch (Result)
            {
                case TRANS2QUIK_SUCCESS:                                //0
                    return "TRANS2QUIK_SUCCESS";
                    break;
                case TRANS2QUIK_FAILED:                                 //1
                    return "TRANS2QUIK_FAILED";
                    break;
                case TRANS2QUIK_QUIK_TERMINAL_NOT_FOUND:                //2
                    return "TRANS2QUIK_QUIK_TERMINAL_NOT_FOUND";
                    break;
                case TRANS2QUIK_DLL_VERSION_NOT_SUPPORTED:              //3
                    return "TRANS2QUIK_DLL_VERSION_NOT_SUPPORTED";
                    break;
                case TRANS2QUIK_ALREADY_CONNECTED_TO_QUIK:              //4
                    return "TRANS2QUIK_ALREADY_CONNECTED_TO_QUIK";
                    break;
                case TRANS2QUIK_WRONG_SYNTAX:                           //5
                    return "TRANS2QUIK_WRONG_SYNTAX";
                    break;
                case TRANS2QUIK_QUIK_NOT_CONNECTED:                     //6
                    return "TRANS2QUIK_QUIK_NOT_CONNECTED";
                    break;
                case TRANS2QUIK_DLL_NOT_CONNECTED:                      //7
                    return "TRANS2QUIK_DLL_NOT_CONNECTED";
                    break;
                case TRANS2QUIK_QUIK_CONNECTED:                         //8
                    return "TRANS2QUIK_QUIK_CONNECTED";
                    break;
                case TRANS2QUIK_QUIK_DISCONNECTED:                      //9
                    return "TRANS2QUIK_QUIK_DISCONNECTED";
                    break;
                case TRANS2QUIK_DLL_CONNECTED:                          //10
                    return "TRANS2QUIK_DLL_CONNECTED";
                    break;
                case TRANS2QUIK_DLL_DISCONNECTED:                       //11
                    return "TRANS2QUIK_DLL_DISCONNECTED";
                    break;
                case TRANS2QUIK_MEMORY_ALLOCATION_ERROR:                //12
                    return "TRANS2QUIK_MEMORY_ALLOCATION_ERROR";
                    break;
                case TRANS2QUIK_WRONG_CONNECTION_HANDLE:                //13
                    return "TRANS2QUIK_WRONG_CONNECTION_HANDLE";
                    break;
                case TRANS2QUIK_WRONG_INPUT_PARAMS:                     //14
                    return "TRANS2QUIK_WRONG_INPUT_PARAMS";
                    break;
                default:
                    return "UNKNOWN_VALUE";
                    break;
            }
        }
        public static string ByteToString(byte[] Str)
        { 
            string s="";
            for (int i = 0; i < Str.Length; i++)
            {
                s = s + Str[i].ToString();
            }
            return s;
        }

Лежит в качестве примера на одном из сайтов.
Ну автору всё равно спасибо, пример и правда полезный (да и код прикольный :)).

Запостил: greeny greeny, (Updated )

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

    • Я сейчас разбираюсь с этим горе-кодом. Там оказывается (во второй процедуре) массив байт должен быть преобразован в строку. Так вот, любая строка в итоге получается типа такой: "567827638723658327568347658347658376487 23682346". Потому что Byte.ToString() рулит. Пипец. Автор бедняга наверное долго мучался, но так и не родил.
      Ответить
      • Я еще долго думал, что значат эти цифры (когда запускал приложение).
        Ответить
    • А чем ещё свитч можно заменить, кроме массивом констант или if'ами?
      Ответить
      • Если у сущности появились имя и значение, то это как минимум структура. В будущем, возможно, дорастет до объекта.
        Практически все вызовы switch в языках программирования высокого уровня от лени или неумения. Заменять их следует вызовом метода объекта или извлечением поля из структуры.
        Ответить
          • Гость #comment9126 прав, в C# для этого лучше всего подходит enum. Я обычно пишу в C++, поэтому имел ввиду примерно следующее:
            struct TNamedConstsnt
            {
            const long Value;
            const char* const Name;
            TNamedConstsnt(const long value, const char* const name) :
            Value(value), Name(name)
            {}
            };
            Затем создаем константы и запихиваем их в контейнер, например так
            new TNamedConstsnt(5, "TRANS2QUIK_DLL_VERSION_NOT_SUPPORTE D");
            Функция, описанная автором, вырождается в проход по контейнеру в поисках соответствия.
            Это если изобретать велосипед. А вообще есть реализованные контейнеры для пар ключ-значение, которые ко всему прочему еще проверяют уникальность ключа.
            Ответить
        • "Практически все вызовы switch в языках программирования высокого уровня от лени или неумения"
          Да ну?
          К твоему сведению switch в .Net, например, при компиляции сразу преобразуется в методы и в очень многих случаях предоставляет возможность писать простой, очевидный и очень быстрый код.
          Ответить
      • К этому свичу прилагается таблица констант. Всю эту таблицу можно было забить в enum, а потом использовать метод ToString().
        Там вообще-то еще операторы break не выполняются. 🙂
        Ответить
      • Мапом, если не классом. а массив (или не массив) пар вынести в отдельный файл.
        Ответить
  • а если это сасунуть в dll то можно не испоьзовать switch
    там по строке вызываеться функции, можно конечно отправлять функцию в своюже программу, но это медлее будет
    external <адрес dll(exe )> name <насвание процедуры>
    Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8