1. Java / Говнокод #6872

    +80

    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
    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
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    public class ... extends Applet implements MouseListener, ActionListener {
    	...    
    
    	@Override
    	public void actionPerformed(ActionEvent arg0)
    	{
    		// TODO Auto-generated method stub
    		boolean bNeedRepaint = false;
    		if(arg0.getSource() == m_ZoomIn)
    		{
    			...
    		}
    		else if(arg0.getSource() == m_ZoomOut)
    		{
    			...
    		}
    		else if(arg0.getSource() == m_ZoomBack)
    		{
    			...
    		}
    		else if(arg0.getSource() == m_MaxHeight)
    		{
    			...
    		}
    		else if(arg0.getSource() == m_MinHeight)
    		{
    			...
    		}
    		else if(arg0.getSource() == m_MaxWidth)
    		{
    			...
    		}
    		else if(arg0.getSource() == m_MinWidth)
    		{
    			...
    		}
    		else if(arg0.getSource() == m_MaxSpace)
    		{
    			...
    		}
    		else if(arg0.getSource() == m_MinSpace)
    		{
    			...
    		}
    		else if(arg0.getSource() == m_MovLeft)
    		{
    			...
    		}
    		else if(arg0.getSource() == m_MovRight)
    		{
    			...
    		}
    		else if(arg0.getSource() == m_MovUp)
    		{
    			...
    		}
    		else if(arg0.getSource() == m_MovDown)
    		{
    			...
    		}
    		else if(arg0.getSource() == m_AlignCenter)
    		{
    			...
    		}
    		else if(arg0.getSource() == m_TxtFirst)
    		{
    			...
    		}
    	}
    }

    Из апплета, присланного китайцами для интеграции в наше веб-приложение.

    Запостил: lucidfox, 06 Июня 2011

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

    • Все ок, вам привезли опухоль для пересадки)))
      Ответить
    • очень популярный подход, даже в туториалах так.
      Ответить
      • Значит, плохие туториалы (либо застрявшие во временах Java 1.0).

        Во-первых, анонимные классы для кого придумали?
        Во-вторых, если добавится ещё одна кнопка, её придётся в три места вставлять.
        И в третьих, actionPerformed - это деталь реализации, которая не должна торчать наружу. Инкапсуляция-с.

        Я уж молчу про венгерскую нотацию (китайцы портировали апплет с виндового приложения на MFC, так что им простительно), про arg0, и про то, что getSource() вызывается в каждом ифе.
        Ответить
        • > actionPerformed - это деталь реализации, которая не должна торчать наружу.
          не получится-с. в интерфейсе ActionListener этот метод обьявлен как public (ну правильно), а сужать область видимости нельзя
          Ответить
          • Всё правильно, именно поэтому сам класс апплета и не должен реализовывать actionListener.

            надо писать так:

            button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) { ... }
            });
            Ответить
        • если не жалко, киньте, пожалуйста, описание данного класса сюда [email protected]
          Ответить
        • Про анонимные классы написал ниже, кнопок не так много, чтобы запутаться (ну и вставлять в 2 или 3 местах — небольшая разница), насчёт инкапсуляции не нужно фанатеть — этот класс никто извне использовать не будет (может это вообще единственный класс?), нотация — дело вкуса (если она не слишком ужасна), getSource() — простой геттер, проинлайнится.
          Ответить
    • да, кстати, похоже либо портировали давно, либо по древним туториалам делали, ибо
      extends Applet implements MouseListener, ActionListener
      Ответить
      • Код-то свежий, но писали плюсовики. Может, они просто не знали, что в Java есть анонимные классы.
        Ответить
        • ну понятно, значит руководствовались туториалами как шаблоном для кода, и слепили.
          Ответить
    • кстати, а апплет какую задачу выполняет?
      Ответить
      • Без излишних подробностей - это редактор некоей векторной модели с кнопками, которыми эту модель можно двигать и масштабировать.
        Ответить
    • Прям чувствуется гигансская конструкция из С Win32API, где один switch для
      всех обратных вызовов. ИМХО явно не Java Style.
      Ответить
    • Это случайно не тот китаец, что за айпад с айфоном почку продал?
      После такого и я почку отдам чтобы такое не видеть...
      Ответить
      • поберегите свои органы для более серьезных случаев. ну или продайте за $10000
        Ответить
        • Да, звуки органа так возбуждают некоторые органы.
          Уши же! А вы что подумали?
          Ответить
    • Если и считать это говнокодом, то у такого приёма есть веские основания.

      Делать обработчики через анонимные классы — это несколько сот лишних байт на обработчик. В сумме может существенно повлиять на размер апплета. А если апплет не в jar засовывается, а отдельным классом — то и классов станет несколько, многократно вырастет число обращений на сервер. Увеличение объёма, увеличение времени старта. Плюсовики нервно относятся к лишнему оверхеду.

      Так что это — оптимизация за счёт некоторого геморроя в разработке. К устаревшей жаве отношения не имеет, анонимные классы были практически всегда.
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить

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