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

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

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

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

package {

	public class Fruit {

		public static const Apple:Fruit=new Fruit(0);
		public static const Pear:Fruit=new Fruit(1);
		public static const Peach:Fruit=new Fruit(2);

		private var _value:int;

		public function Fruit(value:int) {
			_value=value;
		}

		public function get value():int {
			return _value;
		}
	}
}

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

package {

	public class Vegetable {
		public static const Tomato:int=0;
		public static const Onions:int=1;
		public static const Cucumber:int=2;
	}
}

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

  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