Jawa / Говнокод #6872 Ссылка на оригинал

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
  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 lucidfox, (Updated )

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

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

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

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

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

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

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

    Так что это — оптимизация за счёт некоторого геморроя в разработке. К устаревшей жаве отношения не имеет, анонимные классы были практически всегда.
    Ответить
  • и"X.MP)I:LE,LГHHTTNUDDANVJIPKPEZBNVRDYMVEFTPVCTTQLJLMSKSNSPFSIOTPSBYZRQPHAGRPGNKVUQWWGWRGCYIFEQJCMPNSJALIPDFPWHZVQVVINVRJBMUBNAIMXLOREVIJTYMOKEKVKCNRSPADPULWQQXBBQDITTJMLNYDERBUZSYFFQUKUDFQLGFDFKNUVHCDNXVUPOHNLZJJCOIYIEDUDEKDLOLYWXRCTOOLGHPZEALPPTXUDKLZKUDYRCRISKEEBWOXNDNTMPRIDBELLYCXCTMY
    Ответить

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

Помни, guest, за тобой могут следить!

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


    8