Главная > Мысли вслух > Эмуляция типа enum

Эмуляция типа enum

Java сильно влияет на ActionScript разработчиков. Сегодня я попробую эмулировать тип данных enum из Java.

Например вот так:

  1. package {
  2.  
  3. public class Fruit {
  4.  
  5. public static const Apple:Fruit=new Fruit(0);
  6. public static const Pear:Fruit=new Fruit(1);
  7. public static const Peach:Fruit=new Fruit(2);
  8.  
  9. private var _value:int;
  10.  
  11. public function Fruit(value:int) {
  12. _value=value;
  13. }
  14.  
  15. public function get value():int {
  16. return _value;
  17. }
  18. }
  19. }

этот вариант «более правильный и изящный с точки зрения архитектуры», однако я почему то предпочитаю вариант попроще -«некрасиво и убого, не нужно так писать»:

  1. package {
  2.  
  3. public class Vegetable {
  4. public static const Tomato:int=0;
  5. public static const Onions:int=1;
  6. public static const Cucumber:int=2;
  7. }
  8. }

К тому-же он работает в два с лишним раза быстрее. Но придется все таки изучать правильные и архитектурно изящные варианты. От этого зависит буду я хорошим программистом или говнокодером...

  1. 17 октября 2009 в 11:52 | #1

    че-то это совсем не enum
    а вопрос про программиста и говнокодера в контексте использования метода, который в 2 раза быстрее — что за фигня? http://onenterframe.ru/2009/09/20/%d1%81%d0%ba%d0%be%d1%80%d0%be%d1%81%d1%82%d1%8c-vs-oop/

  2. Александр
    17 октября 2009 в 11:58 | #2

    И в чём в вашем варианте изящество?

  3. admin
    17 октября 2009 в 12:49 | #3

    @Valentin
    Ну… мне сказали что именно так должен выглядеть enum в AS3 для совместимости с Java, и именно на такой стиль нужно ориентироваться.

    Да, и в таком случае нельзя будет сравнивать Fruit с Vegetable, что может быть полезно

  4. 17 октября 2009 в 21:16 | #4

    Если уж эмулировать, то наверное больше вот на это должно быть похоже:

    package {
    
    	public class Fruit {
    		public static const Apple:Fruit=new Fruit();
    		public static const Pear:Fruit=new Fruit();
    		public static const Peach:Fruit=new Fruit();
    
    		private static var _n:int = 0;
    		private var _value:int;
    
    		public function Fruit() {
    			_value=_n++;
    		}
    
    		public function get value():int {
    			return _value;
    		}
    	}
    }

  5. admin
    17 октября 2009 в 22:38 | #5

    @elmortem
    Да, так было бы даже лучше. Чего уж там — намного изящнее.

  6. amelin
    19 ноября 2009 в 22:35 | #6

    @elmortem
    Это автосгенерированный класс, поэтому лучше изначальный вариант(-1 int на enum)

  1. 19 октября 2009 в 16:53 | #1