Java сильно влияет на ActionScript разработчиков. Сегодня я попробую эмулировать тип данных из 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;
}
}
К тому-же он работает в два с лишним раза быстрее. Но придется все таки изучать правильные и архитектурно изящные варианты. От этого зависит буду я хорошим программистом или говнокодером...
Читая к предыдущему посту я было усомнился в своей точке зрения. И решил провести тест. В итоге имеем класс Item:
package {
import flash.display.Bitmap;
public class Item {
public var label:String;
public var data:int;
public function Item(_label:String, _data:int):void {
label = _label;
data = _data;
}
}
}
и собственно тест:
package {
import flash.display.Sprite;
import flash.utils.Timer;
import flash.utils.getTimer;
public class Test extends Sprite {
private const COUNT : int = 1000000;
public function Test() {
var list1 : Array = new Array();
var list2 : Array = new Array();
var begin : int;
var end : int;
var i : int;
begin = getTimer();
for (i = 0;i < COUNT; i++) {
list1.push({label:"str", data:i});
}
end = getTimer();
trace("time for simple Object: ", end-begin);
begin = getTimer();
for ( i = 0;i < COUNT; i++) {
list2.push(new Item("str", i));
}
end = getTimer();
trace("time for class Item: ", end-begin);
}
}
}
В итоге у меня получилось 1730 и 2100 миллисекунд для Объекта и Класса соответственно.
Комментарии