1. Си / Говнокод #17178

    +133

    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
    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
    if (wParam == MI_CMDLINEBEGIN)
              return xstrcpyW((void *)lParam, wpCmdLineBegin);
            if (wParam == MI_CMDLINEEND)
              return xstrcpyW((void *)lParam, wpCmdLineEnd);
            if (wParam == MI_SHOWMODIFY)
              return moCur.dwShowModify;
            if (wParam == MI_STATUSPOSTYPE)
              return moCur.dwStatusPosType;
            if (wParam == MI_STATUSUSERFORMAT)
              return xstrcpynW((void *)lParam, moCur.wszStatusUserFormat, MAX_PATH);
            if (wParam == MI_WORDBREAKCUSTOM)
              return moCur.dwWordBreakCustom;
            if (wParam == MI_PAINTOPTIONS)
              return moCur.dwPaintOptions;
            if (wParam == MI_EDITSTYLE)
              return moCur.dwEditStyle;
            if (wParam == MI_RICHEDITCLASS)
              return moCur.bRichEditClass;
            if (wParam == MI_AKELADMINRESIDENT)
              return moCur.bAkelAdminResident;
            if (wParam == MI_DATELOGFORMAT)
              return xstrcpynW((void *)lParam, moCur.wszDateLogFormat, 128);
            if (wParam == MI_DATEINSERTFORMAT)
              return xstrcpynW((void *)lParam, moCur.wszDateInsertFormat, 128);
            if (wParam == MI_AKELUPDATEROPTIONS)
              return xstrcpynW((void *)lParam, moCur.wszAkelUpdaterOptions, MAX_PATH);
            if (wParam == MI_URLCOMMAND)
              return xstrcpynW((void *)lParam, moCur.wszUrlCommand, MAX_PATH);
            if (wParam == MI_TABNAMEFIND)
              return xstrcpynW((void *)lParam, moCur.wszTabNameFind, MAX_PATH);
            if (wParam == MI_TABNAMEREP)
              return xstrcpynW((void *)lParam, moCur.wszTabNameRep, MAX_PATH);
            if (wParam == MI_ONTOP)
              return moCur.bOnTop;
            if (wParam == MI_STATUSBAR)
              return moCur.bStatusBar;
            if (wParam == MI_KEEPSPACE)
              return moCur.bKeepSpace;
            if (wParam == MI_WATCHFILE)
              return moCur.bWatchFile;
            if (wParam == MI_SAVETIME)
              return moCur.bSaveTime;
            if (wParam == MI_SINGLEOPENFILE)
              return moCur.bSingleOpenFile;
            if (wParam == MI_SINGLEOPENPROGRAM)
              return moCur.dwSingleOpenProgram;
            if (wParam == MI_TABOPTIONSMDI)
              return moCur.dwTabOptionsMDI;
            if (wParam == MI_EXECUTECOMMAND)

    И такого больше сотни строк.
    Akelpad.

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

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

    • Паттерн OmniHandler?
      Ответить
      • Паттерн Map/array
        Ответить
        • Map из std::function'ов? Ну, в принципе, реально. Только портянка станет еще больше...
          Ответить
    • Ну а что ты хотел от голого WinAPI?
      Ответить
      • Ну так switch вроде как с WinAPI не конфликтует особо...
        Ответить
        • Ну будет чуть побыстрее и на капельку короче. Мелочи это всё... Один хрен от портянки с заворачиванием параметров и от портянки с их разворачиванием не спасет. Маршаллинг через wParam/lParam такой маршаллинг...
          Ответить
          • В 2 раза короче же. А вообще да, окна на WinAPI - кромешный ад.
            Ответить
            • > В 2 раза короче же.
              В 2 раза? Лолшто :)
              if (wParam == MI_DATELOGFORMAT)
                  return xstrcpynW((void *)lParam, moCur.wszDateLogFormat, 128);
              // 96 символов
              case MI_DATELOGFORMAT:
                  return xstrcpynW((void *)lParam, moCur.wszDateLogFormat, 128);
              // 88 символов
              Даже для самых коротких веток не в 2 раза.
              Ответить
              • Имел в виду по строкам короче, если в одну строку писать кейсы.
                case MI_DATELOGFORMAT: return xstrcpynW((void *)lParam, moCur.wszDateLogFormat, 128);
                Ответить
                • Ну и нахуя зачем экономить строки? Имхо, читаться стало хуже, чем у ОП'а.

                  P.S. Таким макаром if'ы тоже можно в одну строку свалить...
                  Ответить
                  • нормально оно читается
                    когда такая портянка из значений, они:
                    - должны выстраиваться в легкоузнаваемую колонку,
                    - должны быть максимально компактны относительно их switch, иначе если у тебя там получится пара пейдждаунов, ты забудешь какую переменную свитчат

                    У ОП вместо колонки эти значения засунуты чуть ли не дальше, чем строчка с действием, искать глазами становится одно мучение.
                    И главное вовремя забить на тарасо-ввхвв-мониторы в 80 символов в ширину
                    case MI_CMDLINEBEGIN:      return xstrcpyW((void *)lParam, wpCmdLineBegin);
                    case MI_CMDLINEEND:        return xstrcpyW((void *)lParam, wpCmdLineEnd);
                    case MI_SHOWMODIFY:        return moCur.dwShowModify;
                    case MI_STATUSPOSTYPE:     return moCur.dwStatusPosType;
                    case MI_STATUSUSERFORMAT:  return xstrcpynW((void *)lParam, moCur.wszStatusUserFormat, MAX_PATH);
                    case MI_WORDBREAKCUSTOM:   return moCur.dwWordBreakCustom;
                    case MI_PAINTOPTIONS:      return moCur.dwPaintOptions;
                    case MI_EDITSTYLE:         return moCur.dwEditStyle;
                    Ответить
                    • Ну ок, с тарасоформатированием и правда наглядней.
                      Ответить
          • switch разворачивается при компиляции не в последовательность if-ов!
            Возможен переход по адресу из таблицы или вычисление адреса (если компилятор раскрутит, как его вычислить) на лету.
            Ответить
    • Ну а как иначе-то?)
      Вообще конечно такие портянки хорошо генерить, но гдето ж оно должно быть написано)
      Ответить

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